2016-10-12 4 views
0

私は自分のアクティビティに2つのTextureViewを表示する必要があるアプリケーションを作成しています。私はonSurfaceTextureAvailable()内の次のコードを使用してMediaPlayerオブジェクトを使用してTextureViewインスタンスのそれぞれに動画を添付しています:onSurfaceTextureAvailableがどのテクスチャビューに対して呼び出されるか

@Override 
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) { 

    Surface surface = new Surface(surfaceTexture); 

    mMediaPlayer1 = new MediaPlayer(); 

    try { 
     mMediaPlayer1.setDataSource(<filePath>); 
    } catch (IOException e) { 
     Log.e(TAG, "Unable to load the file from the file system", e); 
     return; 
    } 

    mMediaPlayer1.setSurface(surface); 
    mMediaPlayer1.setLooping(true); 
    mMediaPlayer1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mediaPlayer) { 
      isPlaybackReady = true; 
     } 
    }); 

    mMediaPlayer1.prepareAsync(); 
} 

を今、私はTextureViewの2つのインスタンスを持っている場合、私はonSurfaceTextureAvailable(...)へのコールバックがどのTextureViewのために知っているだろうか。

他の方法は、TextureView.getSurfaceTexture()を呼び出すことによって、関連するSurfaceTexture上のホールドを取得することにより、セットアップにonSurfaceTextureAvailable(...)MediaPlayerオブジェクトです。私もそれを試みたが、それは常にnullを返す。このために何か他に必要なことはありますか?

答えて

1

異なるリスナでTextureViewの2つのインスタンスを設定することができます。

textureView1.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { 
    @Override 
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) { 
     doSomething(textureView1, surfaceTexture, i, i1); 
    } 
    // implement other methods 


    }); 

textureView2.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { 
    @Override 
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) { 
     doSomething(textureView2, surfaceTexture, i, i1); 
    } 

    // implement other methods 
    }); 

}

+0

どのように私はそれを欠場することができます。どうもありがとう!!! – Swapnil

関連する問題