MediaController始终显示在屏幕上的所有视图之上,并且在隐藏之前不会将点击传递到下方视图,我的问题是:
如何在MediaController顶部添加按钮视图,以便处理点击事件? 要么 如何将点击事件传递到下方视图?
答案 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)
当视图与另一个视图重叠时,隐藏视图将不会获得任何触摸事件,因为顶部的视图会消耗触摸事件。如果您希望隐藏视图接收触摸事件,则必须手动将触摸事件从顶视图传递到隐藏视图。 这里有两种可能性:
以下是此示例代码:
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>
此处按钮隐藏列表视图,当触摸事件传递到下面的布局时,列表仍会滚动 我希望这将有所帮助。 :)