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これについて非常によく似た質問があります。より良い解決策があるかもしれません: Android MediaControllerは他のすべてのタッチイベントを傍受します
ビューが別のビューに重なっている場合、一番上のビューがタッチ イベントを消費するため、非表示のビューはタッチ イベントを取得しません。非表示のビューでタッチ イベントを受信する場合は、タッチ イベントをトップ ビューから非表示のビューに手動で渡す必要があります。ここでは、次の 2 つの可能性があります。
これのサンプルコードは次のとおりです。
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>
ここで、ボタンはリスト ビューを隠していますが、タッチ イベントが下のレイアウトに渡されると、リストはスクロールします。
これが役立つことを願っています。:)