2011-09-30 64 views
3

在我的viewFlipper中,一些TextViews是動態加載的。大小可能會有所不同,這意味着viewFlipper下可能會有一些剩餘空間(見截圖的綠色部分)Android如何在Activity中的任意位置滑動時觸發OnFling不僅在ViewFlipper中觸發

screenshot

我要上灰色部分刷卡時不僅要調用的onFling方法(這是viewflipper),而且還綠色部分刷卡時

我的佈局是這樣的:

<?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:id="@+id/root"> 


<ViewFlipper android:id="@+id/viewFlipper" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">  
</ViewFlipper> 

</RelativeLayout> 

在我的onCreate我這樣做:

this.viewFlipper = (ViewFlipper) this.findViewById(R.id.viewFlipper); 

    this.gestureDetector = new GestureDetector(new MyGestureDetector()); 

    RelativeLayout root = (RelativeLayout) this.findViewById(R.id.root); 
    root.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (gestureDetector.onTouchEvent(event)) { 
       Log.d("root", "true"); 
       return false; 
      } else { 
       Log.d("root", "false"); 
       return false; 
      } 
     } 
    }); 

到目前爲止,即使我變爲true,我也試圖返回false,以便事件不會被消耗並傳遞給viewFlipper,即使在viewflipper之外進行了滑動操作。

請注意,viewFlipper不需要任何顯式的onTouchListener。它適用於或不適用(我真的不明白爲什麼..)

有誰知道該怎麼辦?

回答

8

嘗試將android:clickable="true"添加到RelativeLayout,你應該可以做到。

如果不工作,你可能也需要實現這兩個方法(如果你還沒有媒體鏈接):

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    //TouchEvent dispatcher. 
    if (gestureDetector != null) { 
     if (gestureDetector.onTouchEvent(ev)) 
      //If the gestureDetector handles the event, a swipe has been executed and no more needs to be done. 
      return true; 
    } 
    return super.dispatchTouchEvent(ev); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    return gestureDetector.onTouchEvent(event); 
} 
+0

機器人:可點擊=「真」的伎倆。謝謝! – IHeartAndroid

+0

真棒!謝謝:) – nithinreddy

+0

謝謝,當我有一個AdView攔截我的滑動事件時,這非常有用。 –

相關問題