2012-10-25 32 views
3

我有一个ViewFlipper,并在其中包含四个滚动视图,其中包含布局。在ViewFlipper上滑动

我用下面的代码(每个滚动型)刷卡:

ScrollView View1 = (ScrollView) findViewById(R.id.View1); 
    View1.setOnTouchListener(new OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 

      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       FirstX = (int) event.getX(); 
      } 

      if (event.getAction() == MotionEvent.ACTION_MOVE) { 
       int LastX = (int) event.getX(); 

       if (FirstX - LastX > SWIPE_MIN_DISTANCE) { 
        viewFlipper.setInAnimation(slideLeftIn); 
        viewFlipper.setOutAnimation(slideLeftOut); 
        viewFlipper.showNext(); 
       } else if (LastX - FirstX > SWIPE_MIN_DISTANCE) { 
        viewFlipper.setInAnimation(slideRightIn); 
        viewFlipper.setOutAnimation(slideRightOut); 
        viewFlipper.showPrevious(); 
       } 
      } 

      return true; 
     } 
    }); 

它的工作原理,但它看起来像如果我从视图1滑动即可查看2,我看到一个观点2和3混合在一起并且它终于显示了视图4.

因此,看起来每个视图的OnTouchListeners在彼此之后被调用。 我该如何防止这种情况发生?

一个简短而快速的滑动不会做它应该做的事情。

RG, 埃里克

回答

1

您应该将您在MotionEvent.ACTION_MOVE中的代码移动到MotionEvent.ACTION_UP以获得滑动。现在,如果您不想刷卡,并且想要随手指一起移动屏幕,则应按照刚刚提到的JafarKhQ实施ViewPager

+0

从ACTION_MOVE改为ACTION_UP的确有窍门。 现在我可以在没有问题的情况下在滚动视图之间滑动。 谢谢。 – Eric

1

的setOnTouchListener会叫multible时间(当你滑动你的手指),所以

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

将称为多时间

我建议你使用ViewPager而不是ViewFlipper。

+1

如果您的答案不包括该问题,请添加它作为评论。 –

+0

这种让我回到没有任何工作的开始。我真的很高兴能够在布局之间滑动。 – Eric

+0

我更新了答案。对不起, – JafarKhQ