Co chcę zrobić, to Pokaż obraz tła na SurfaceView przed rozpoczęciem odtwarzania wideo.Błąd "[SurfaceView] połącz: już podłączony", jeśli narysuję mapę bitową jako tło SurfaceView, a następnie odtwarzam wideo
- Próbowałem po prostu narysować obraz jpeg jako jego tło z SurfaceView. Zadziałało.
- Próbowałem także odtworzyć wideo na SurfaceView. To też zadziałało.
Ale kiedy próbowałem narysować obrazek jpeg jako tło powierzchni w funkcji powierzchniowej, a następnie odtworzyć wideo. Wystąpił błąd "[SurfaceView] connect: already connected".
Wszelkie pomysły? Dzięki.
Oto kod częściowego
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
Bitmap background = BitmapFactory.decodeResource(getResources(), R.drawable.pic1);
float scale = (float) background.getHeight()/(float)mPreview.getHeight();
int newWidth = Math.round(background.getWidth()/scale);
int newHeight = Math.round(background.getHeight()/scale);
mScaledBitmap = Bitmap.createScaledBitmap(background, newWidth, newHeight, true);
Canvas canvas = mHolder.lockCanvas();
canvas.drawBitmap(mScaledBitmap, 0, 0, null);
mHolder.unlockCanvasAndPost(canvas);
} catch (Exception e)
{}
// initialize mediaplayer
try {
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource("/sdcard/Movies/2.mp4");
mMediaPlayer.setDisplay(mHolder);
mMediaPlayer.setLooping(true);
mMediaPlayer.prepare();
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnCompletionListener(this);
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "error: " + e.getMessage(), e);
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "error: " + e.getMessage(), e);
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
Log.i(TAG, "surfaceChanged(w="+ width + ", h=" + height);
mSurfaceWidth = width;
mSurfaceHeight = height;
mVideoWidth = mMediaPlayer.getVideoWidth();
mVideoHeight = mMediaPlayer.getVideoHeight();
Log.i(TAG, "video size w=" + mVideoWidth + ", h=" + mVideoHeight +")");
}
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
Log.i(TAG, "onPrepared");
mMediaPlayer.start();
}