VideoView auf der Oberseite der SurfaceView

Ich versuche zu zeigen, einen VideoView auf der Spitze eines SurfaceView. Aber es ist nicht sichtbar, sondern reagiert auf Klicks (MediaController wird angezeigt, und der Ton spielt). Das video scheint gespielt zu werden, hinter der SurfaceView also ich habe auch versucht zu nutzen setZOrderMediaOverlay() - und/oder setZOrderOnTop() aber nichts geändert

Wenn ich auf der Startseite sehe ich die VideoView für einen Sekundenbruchteil in die fading-animation, so es ist wirklich es.

Versuchte ich es mit einer xml-layout-und auch ganz programmatisch, aber nichts funktioniert.

Hier ist meine Aktivität:

public class VideoTest extends Activity {
    private RelativeLayout mLayout;
    private VideoView mVideo;
    private Handler mHandler;
    private FrameLayout mFrameLayout;
    private SurfaceView mSurfaceView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mFrameLayout = new FrameLayout(this);
        mFrameLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

        mLayout = new RelativeLayout(this);
        mLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        mVideo = new VideoView(this);
        mVideo.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        mSurfaceView = new SurfaceView(this);
        mSurfaceView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

        mSurfaceView.setZOrderMediaOverlay(false);
        mSurfaceView.setZOrderOnTop(false);

        mFrameLayout.addView(mSurfaceView);
        mLayout.addView(mVideo);
        mFrameLayout.addView(mLayout);

        setContentView(mFrameLayout);

        //with xml
//       setContentView(R.layout.main);
//       mFrameLayout = (FrameLayout) findViewById(R.id.activity_reader);
//       mLayout = (RelativeLayout) findViewById(R.id.videoview);
//       mVideo = (VideoView) findViewById(R.id.video_view);
//       mSurfaceView = (SurfaceView) findViewById(R.id.surface_view);

        //Set the handler to me messaged from the threads
        mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg != null) {
                    mVideo.setMediaController(new MediaController(mVideo.getContext()));
                    mVideo.setVideoPath("/mnt/sdcard/myvideo.mp4");
                    if (mLayout.getVisibility() == View.VISIBLE) {
                        mLayout.setVisibility(View.GONE);
                    } else {
                        mLayout.setVisibility(View.VISIBLE);
                    }
//                   mFrameLayout.bringChildToFront(mLayout);
//                   mFrameLayout.bringChildToFront(mVideo);
//                   mFrameLayout.requestLayout();
//                   mFrameLayout.invalidate();
//                   mFrameLayout.postInvalidate();
//                   mVideo.requestFocus();
                }
                super.handleMessage(msg);
            }
        };
    }

    /** Inflate the menu */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.activity_reader_menu, menu);
            return true;
    }

    /** Handle menu items events */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.toggle_video:
                new Thread() {
                    public void run() {
                        mHandler.sendEmptyMessage(0);
                    };
                }.start();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

Mein xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_reader"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <SurfaceView android:id="@+id/surface_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    <RelativeLayout android:id="@+id/videoview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="gone">
        <VideoView android:id="@+id/video_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>
</FrameLayout>

Einen Hinweis: dies ist nur ein test, um herauszufinden, warum es nicht funktioniert habe ich versucht zu minimieren, den code aus meinem realen Anwendung, wo die Sichtbarkeit des VideoView wird gesteuert durch eine Prozedur, die eine Nachricht aus der Zeichnung Gewinde der SurfaceView. Das ist der Grund, warum ich implementiert einen thread, die die Nachricht sendet, wenn das Menü verwendet wurde.

InformationsquelleAutor WarrenFaith | 2011-03-25

Schreibe einen Kommentar