我有兩個活動,其中一個顯示RecyclerView,另一個顯示圖像。點擊RecyclerView中的一個項目,會顯示第二個活動,其中包含一個與點擊項目相關的小圖片,背景透明,顯示第一個活動。將觸摸事件傳遞到當前活動後面的活動
我試圖讓第二個Activity忽略圖像邊界之外的所有觸摸事件,以便列表可以在屏幕上滾動顯示圖像。這是可以實現的
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
但是,這隻適用於第二個活動的窗口不佔用整個屏幕。這是第二個活動佈局的例子:
<?xml version="1.0" encoding="utf-8"?>
<CustomFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent">
<ImageView
android:id="@+id/imageView_item"
android:layout_width="150dp"
android:layout_height="150dp"
android:background="@color/colorPrimary"
android:layout_gravity="center"/>
</CustomFrameLayout>
由於CustomFrameLayout具有高度和寬度,所述父匹配時,它攔截不屬於ImageView的內部的所有觸摸事件。
我認爲,在CustomFrameLayout覆蓋onInterceptTouchEvent,讓我忽略下面的代碼不需要觸摸事件:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (/* Is touch event within bounds of ImageView */) {
return true;
}
return false; //Otherwise don't intercept
}
但是,這也不行,沒有任何人有任何其他的想法?
比方說,FrameLayout需要全屏,我不能使用片段,這是可行的嗎?
請參閱以下[FLAG_NOT_TOUCH_MODAL]文檔(https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_NOT_TOUCH_MODAL)。 它明確指出,它允許您忽略當前窗口的觸摸事件並將其傳遞到下面的窗口。這工作,我可以滾動列表中的第一個活動,通過第二。問題是我的窗口是MATCH_PARENT,正在捕獲這些視圖。 –
到窗口。不是活動。它用於對話框,它使用自己的窗口 –
如果CustomFrameLayout設置爲wrap_content並且因此不是全屏,則任何超出其界限的觸摸事件都將傳遞到後面的Activity。你是說這不應該發生? –