MediaController 始终显示在屏幕中所有视图的顶部,并且在隐藏之前不要将点击传递到下面的视图,我的问题是:
如何在 MediaController 顶部添加按钮视图以便处理点击事件?或者如何将点击事件传递给下面的视图?
MediaController 始终显示在屏幕中所有视图的顶部,并且在隐藏之前不要将点击传递到下面的视图,我的问题是:
如何在 MediaController 顶部添加按钮视图以便处理点击事件?或者如何将点击事件传递给下面的视图?
尝试覆盖 MediaController。调度触摸事件()
它更适合您的任务,请在此处查看我的答案以获取详细说明。
代码将如下所示:
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's a very similar question on this,它可能有更好的解决方案:Android MediaController拦截所有其他触摸事件
当一个视图与另一个视图重叠时,隐藏的视图将不会获得任何触摸事件,因为顶部的视图会消耗触摸事件。如果你想让隐藏视图接收触摸事件,那么你必须手动将触摸事件从顶视图传递到隐藏视图。这里有两种可能:
这是一个示例代码:
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:
<?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>
这里 Button 隐藏了列表视图,当触摸事件传递到下面的布局时,列表仍然会滚动。
我希望这将有所帮助。:)