2016-02-11 70 views
1

我有兩個活動,其中一個顯示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需要全屏,我不能使用片段,這是可行的嗎?

回答

2

你不能那樣做。當第二個活動啓動時,第一個活動暫停。在暫停時,它不會處理任何觸摸事件。正確的做法是在第一個活動中將第二個活動作爲片段。

即使您設法找到強制觸摸事件的方式,它也不一定符合您的希望。寫好的Activity會在調用onPaused時停止大量的處理。它可能無法正確處理觸摸,並試圖使其崩潰。

+1

請參閱以下[FLAG_NOT_TOUCH_MODAL]文檔(https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_NOT_TOUCH_MODAL)。 它明確指出,它允許您忽略當前窗口的觸摸事件並將其傳遞到下面的窗口。這工作,我可以滾動列表中的第一個活動,通過第二。問題是我的窗口是MATCH_PARENT,正在捕獲這些視圖。 –

+0

到窗口。不是活動。它用於對話框,它使用自己的窗口 –

+0

如果CustomFrameLayout設置爲wrap_content並且因此不是全屏,則任何超出其界限的觸摸事件都將傳遞到後面的Activity。你是說這不應該發生? –