我有休耕代碼:渲染視頻白色SurfaceView
public class MainActivity extends Activity {
MediaPlayer player;
Button playBtn;
FrameLayout frame;
boolean plaing = false;
Uri uri;
volatile boolean surfaceReady;
boolean drawCanvas = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
playBtn = (Button) findViewById(R.id.play);
playBtn.setOnClickListener(new CKL());
frame = (FrameLayout) findViewById(R.id.FrameForVideo);
createSurfaceView(frame);
player = new MediaPlayer();
player.setLooping(true);
String urri = "android.resource://com.example.videoplayer/raw/id_1_l_belen";
uri = Uri.parse(urri);
Log.d("atf", urri);
}
@Override
protected void onPause() {
player.stop();
player.reset();
player.release();
super.onPause();
}
private class CKL implements OnClickListener{
@Override
public void onClick(View v) {
if (!plaing)
{
try
{
player.setDataSource(MainActivity.this, uri);
player.setLooping(true);
player.prepare();
player.start();
plaing = true;
Log.d("atf", "Player started");
} catch (Throwable e) {
Error er = new Error(e);
throw er;
}
}
else
{
surfaceReady = false;
player.stop();
player.reset();
plaing = false;
createSurfaceView(frame);
}
}
}
private class SurfaceCreationLisatener implements SurfaceHolder.Callback{
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
@Override
public void surfaceCreated(SurfaceHolder holder) {
player.setDisplay(holder);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {}
}
private void createSurfaceView(FrameLayout frame){
frame.removeAllViews();
SurfaceView surfaceView = new SurfaceView(MainActivity.this);
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
surfaceView.setLayoutParams(lp);
surfaceView.getHolder().addCallback(new SurfaceCreationLisatener());
frame.addView(surfaceView);
}
}
基本上,我使用的MediaPlayer來呈現一個SurfaceView的視頻。問題是這個SurfaceView是黑色的,設置背景顏色是沒用的,因爲它的行爲不像普通的View。
基本上,我需要使這個視圖的黑色背景看不見。在視頻不播放時使整個表面不可見的變通辦法不適合我。 我需要將表面放置在ListView中,即使正在播放視頻,滾動時黑色表面也會閃爍。 (看起來很難看) 我也嘗試過使用TextureView,但還有另外一個問題: 當一次發射多個視頻時,由於在TextureView上渲染會消耗更多資源,因此這些視頻會出現問題。
對我來說,解決方案就是將SurfaceView以白色着色,這樣MediaPlayer就可以將其內容呈現在白色表面上,但我不知道如何做到這一點。 以下代碼無法正常工作。
@Override
public void surfaceCreated(SurfaceHolder holder) {
Canvas cnvs = holder.lockCanvas();
cnvs.drawColor(Color.WHITE);
holder.unlockCanvasAndPost(cnvs);
player.setDisplay(holder);
}
繪製表面後,MediaPlayer沒有顯示任何東西。看起來它不使用表面。爲什麼?......不知道。
我會很感激任何來自你的想法。 謝謝。