我在自定义视图组(Custom1)中有自定义视图组(Custom2)。
Custom1有一个显示RectShape Shapedrawable和两个textview的图像视图。
我在Custom2中设置了onClickListener,它使用this.removeViewAt(0)删除了imageview,并创建了一个新的TextureView,然后调用this.addView(mTextureView,0)并最终使其无效。然后我使用mediaplayer获取textureview播放视频。
以下是代码:
public void setToTextureView() {
//TextureView when not debugging
TextureView View;
View = (TextureView) new TextureView(mContext);
View.setLayoutParams(new LayoutParams(600, 500));
this.removeViewAt(0);
this.addView(View, 0);
View.invalidate();
Log.d("Debug", "Invalidate Called");
View.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Surface mSurface = new Surface(surface);
MediaPlayer mMediaPlayer = new MediaPlayer(); //Debug MediaPlayer issues by setting ItemToDebug = "MediaPlayer"
try {
mMediaPlayer.setDataSource(mContext, Uri.parse("android.resource://" + mContext.getPackageName() + "/" + R.raw.t));
if (ItemToDebug.equals("MediaPlayer")) {
Log.d("MediaPlayer", "Data source set");
}
mMediaPlayer.setSurface(mSurface);
if (ItemToDebug.equals("MediaPlayer")) {
Log.d("MediaPLayer", "Surface set");
}
mMediaPlayer.prepare();
if (ItemToDebug.equals("MediaPlayer")) {
Log.d("MediaPLayer", "Prepared");
}
} catch (IOException e) {
Log.d("IOException", e.getMessage());
}
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (ItemToDebug.equals("MediaPlayer")) {
Log.d("Debug", "Media Player Prepared");
}
mp.start();
}
});
}
现在,我注意到,当我点击视图时,ImageView会消失并出现一个空白区域(大小正确),但没有视频播放,尽管代码似乎执行正常无效();
然而,我可以让TextureView获取一个surfaceTexture并在我中断程序时播放视频并重新进入(即按下按钮,将所有打开的程序带到屏幕,然后选择我的活动试。)
我不太清楚究竟发生了什么,但我很确定没有创建SurfaceTexture,因为onAttached()没有被调用。
有人知道可能会发生什么吗?
干杯,
Ĵ
答案 0 :(得分:0)
视图消失,我需要调用requestLayout()以便在那里绘制其他内容。