奇怪的无效行为

时间:2015-04-10 05:59:55

标签: android view media-player invalidation

我在自定义视图组(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()没有被调用。

有人知道可能会发生什么吗?

干杯,

Ĵ

1 个答案:

答案 0 :(得分:0)

视图消失,我需要调用requestLayout()以便在那里绘制其他内容。