получить сообщение об ошибке «[SurfaceView] connect: уже подключено», если я нарисую растровое изображение в качестве фона SurfaceView, а затем воспроизведу видео

Что я хочу сделать, так это Покажите фоновое изображение в SurfaceView перед началом воспроизведения видео.

  1. Я попытался просто нарисовать изображение в формате jpeg в качестве фона SurfaceView. Это сработало.
  2. Я также пытался воспроизвести видео на SurfaceView. Это также сработало.

Но когда я попытался нарисовать изображение в формате jpeg в качестве фона Surface в функции surfaceCreated, а затем воспроизвести видео. Я получил сообщение об ошибке «Подключение [SurfaceView]: уже подключено».

Есть идеи? Спасибо.

Вот частичный код

@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();
}
8
задан hamer 19 June 2012 в 09:58
поделиться