2010-11-19 47 views
4

視圖腳蹼有4個列表視圖。當我翻轉視圖鰭使用手勢監聽器實現查看鰭狀肢,它工作正常。但我無法滾動列表視圖,因爲觸摸事件不能從視圖腳本到列表視圖。請提供解決方案。Listview不滾動android視圖中的鰭狀肢

private class MyViewFlipper extends ViewFlipper implements OnGestureListener { 
    GestureDetector gestureScanner = new GestureDetector(this); 
    Context context; 

    public MyViewFlipper(Context context) { 
     super(context); 
     this.context=context; 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 
     return gestureScanner.onTouchEvent(event); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return gestureScanner.onTouchEvent(event); 
    } 

    @Override 
    public boolean onDown(MotionEvent arg0) { 
     return true; 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) return false; 

      // right to left swipe 
      if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && 
       Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       this.setOutAnimation(AnimationUtils.loadAnimation(context,R.anim.push_left_out)); 
       this.setInAnimation(AnimationUtils.loadAnimation(context,R.anim.push_left_in)); 
       this.showNext(); 
       return true; 
      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && 
         Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       this.setOutAnimation(AnimationUtils.loadAnimation(context,R.anim.push_right_out)); 
       this.setInAnimation(AnimationUtils.loadAnimation(context,R.anim.push_right_in)); 
       this.showPrevious(); 
       return true; 
      } else if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && 
         Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
       return true; 
      } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && 
         Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
       return true; 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      //Toast.makeText(context, "Error Occurred", Toast.LENGTH_LONG); 
     } 
     return false; 
    } 

    @Override 
    public void onLongPress(MotionEvent e) { 

    } 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
     //I want this event to be handled by list view 
     this.getCurrentView().findViewWithTag("hierarchy_list").dispatchTouchEvent(e1); 

     Log.i(LOG_TAG, "Scroll"); 
     return false; 
    } 

    @Override 
    public void onShowPress(MotionEvent e) { 

    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 
     //DO something 
     return false; 
    } 
} 
+1

請提供代碼。 – Cristian 2010-11-19 20:41:38

+0

發佈了代碼。 – Anup 2010-11-19 22:50:57

回答

1
@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    gestureScanner.onTouchEvent(event); 
    return false; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    gestureScanner.onTouchEvent(event); 
    return false; 
} 

希望那麼事件將被傳遞下來。

+0

從邏輯上講,這也應該起作用。但沒有試過這個。 – Anup 2010-11-21 10:30:24

1

最終我做了這件事,讓事件流下來。

 @Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 
     return gestureScanner.onTouchEvent(event); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
// 
     this.dispatchTouchEvent(event); 
     return gestureScanner.onTouchEvent(event); 
    } 
相關問題