在MediaController之上添加视图

时间:2012-08-18 20:43:54

标签: android android-videoview mediacontroller

MediaController始终显示在屏幕上的所有视图之上,并且在隐藏之前不会将点击传递到下方视图,我的问题是:

如何在MediaController顶部添加按钮视图,以便处理点击事件? 要么 如何将点击事件传递到下方视图?

2 个答案:

答案 0 :(得分:2)

尝试重写MediaController。dispatchTouchEvent()

更适合您的任务,请参阅my answer here详细解释原因。

代码将是这样的:

public class MyMediaController extends MediaController {
    ...
    private WeakReference<Button> mButton;

    // TODO You'll have to call this whenever the layout might have been rebuilt
    // i.e. in onCreate() of your activity (or in onConfigurationChanged() if you
    // handle configuration changes yourself)
    public void setButton(Button button) {
        mButton = new WeakReference<Button>(button);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        int iX = (int) event.getX();
        int iY = (int) event.getY();

        Button button = mButton.get();
        if (button != null) {
            Rect buttonHitRect = new Rect();
            button.getHitRect(buttonHitRect);
            if (buttonHitRect != null && buttonHitRect.contains(iX, iY)) {
                // user hit the button, dispatch event to the button
                button.dispatchTouchEvent(event);
                return true;
            }
        }
        // button did not get hit, pass the touch through
        return super.dispatchTouchEvent(event)
    }
}

试试这个,让我知道它是怎么回事。

UPD Theres是一个非常相似的问题,它可能有更好的解决方案:Android MediaController intercepts all other touch events

答案 1 :(得分:1)

当视图与另一个视图重叠时,隐藏视图将不会获得任何触摸事件,因为顶部的视图会消耗触摸事件。如果您希望隐藏视图接收触摸事件,则必须手动将触摸事件从顶视图传递到隐藏视图。 这里有两种可能性:

  • 您希望视图共享触摸事件:在这种情况下,将触摸事件传递给隐藏视图后,通过onTouch返回false,指示android尚未消耗触摸事件()顶视图的方法。
  • 您希望触摸事件仅由隐藏视图处理:在这种情况下,将触摸事件传递给隐藏视图后指示android通过从顶视图的onTouch()方法返回true来消耗触摸事件

以下是此示例代码:

btn.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch (View v, MotionEvent event)
        {
            list.onTouchEvent(event);
            return true;       // return true if touch event is consumed else return false
        }
    });

XML for this:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@drawable/shape" >

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="#00000000" >
    </ListView>

    <Button
        android:id="@+id/view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#88cc0000"
        android:layout_alignParentTop="true"
        android:onClick="showMe" />
</RelativeLayout>

此处按钮隐藏列表视图,当触摸事件传递到下面的布局时,列表仍会滚动 我希望这将有所帮助。 :)