2011-09-21 14 views
0

我正在定製ViewFlipper我在翻轉頁面通過覆蓋鰭狀肢OnTouch()。但我的問題是無法獲得添加到鰭狀肢的兒童觸摸事件。僅在ViewFlipper空白部分獲得直接觸摸事件。因此,如何通過啓用子點擊事件來獲取所有頁面上的觸摸事件。這是我的自定義ViewFlipper代碼點擊事件不出現在翻轉視圖鰭

謝謝。

public class MyViewFlipper extends ViewFlipper { 

    static final String logTag = "ViewFlipper"; 
    static final int MIN_DISTANCE = 30; 
    private float downX, downY, upX, upY; 
    Animation slideLeftIn; 
    Animation slideLeftOut; 
    Animation slideRightIn; 
    Animation slideRightOut; 
    Context context; 
    ViewFlipper viewFlipper; 

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

    public MyViewFlipper(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.context=context; 
     viewFlipper=this; 
     slideLeftIn = AnimationUtils.loadAnimation(context, R.anim.slide_left_in); 
     slideLeftOut = AnimationUtils.loadAnimation(context, R.anim.slide_left_out); 
     slideRightIn = AnimationUtils.loadAnimation(context, R.anim.slide_right_in); 
     slideRightOut = AnimationUtils.loadAnimation(context, R.anim.slide_right_out); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: { 
       downX = event.getX(); 
       downY = event.getY(); 
       return true; 
      } 
      case MotionEvent.ACTION_UP: { 
       upX = event.getX(); 
       upY = event.getY(); 

       float deltaX = downX - upX; 
       float deltaY = downY - upY; 

       // swipe horizontal? 
       if (Math.abs(deltaX) > MIN_DISTANCE) { 
        // left or right 
        if (deltaX < 0) { 
         this.onLeftToRightSwipe(); 
         return true; 
        } 
        if (deltaX > 0) { 
         this.onRightToLeftSwipe(); 
         return true; 
        } 
       } else { 
        if(Math.abs(deltaX)<15){ 
         onClickEvent(); 
        } 
        //Log.i(logTag, "Swipe was only " + Math.abs(deltaX) 
        //  + " long, need at least " + MIN_DISTANCE); 
       } 
       // swipe vertical? 
       if (Math.abs(deltaY) > MIN_DISTANCE) { 
        // top or down 
        if (deltaY < 0) { 
         this.onTopToBottomSwipe(); 
         return true; 
        } 
        if (deltaY > 0) { 
         this.onBottomToTopSwipe(); 
         return true; 
        } 
       } else { 
        Log.i(logTag, "Swipe was only " + Math.abs(deltaX) 
          + " long, need at least " + MIN_DISTANCE); 
       } 

       return true; 
      } 
      } 
      return false; 

    } 

    public void onRightToLeftSwipe() { 

     viewFlipper.setInAnimation(slideLeftIn); 
     viewFlipper.setOutAnimation(slideLeftOut); 
     viewFlipper.showNext(); 
    } 

    public void onLeftToRightSwipe() { 

     viewFlipper.setInAnimation(slideRightIn); 
     viewFlipper.setOutAnimation(slideRightOut); 
     viewFlipper.showPrevious(); 
    } 

    public void onTopToBottomSwipe() { 
     Log.i(logTag, "onTopToBottomSwipe!"); 
     // activity.doSomething(); 
    } 

    public void onBottomToTopSwipe() { 
     Log.i(logTag, "onBottomToTopSwipe!"); 
     // activity.doSomething(); 
    } 

    public void onClickEvent(){ 
     Toast.makeText(context, "Click",Toast.LENGTH_SHORT); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     return true; 
    } 



} 

回答

0

在您的自定義viewFlipper,你正在返回true這意味着,孩子們不會得到觸摸事件刪除

onInterceptTouchEvent() 

+0

感謝Yashwanth的回覆,我也刪除了onInterceptTouchEvent() ,但然後我的翻轉沒有完成,再次當真正的翻轉完成時,當錯誤的點擊事件,但不是兩個同時完成。 –