2015-09-04 70 views
0

我在我的活动中使用三个viewflippers,每个人都从服务器加载图片。他们三人的动画效果很好。重点是我也试图刷他们每一个。我实现了一个手势检测,这里是代码:在浏览器上滑动冲突

package com.erc.AndroidViewFlipper; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.GestureDetector; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.view.MotionEvent; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.ViewFlipper; 

public class AndroidViewFlipperActivity extends Activity { 

    ViewFlipper page,page2; 

    Animation animFlipInForeward; 
    Animation animFlipOutForeward; 
    Animation animFlipInBackward; 
    Animation animFlipOutBackward; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     page = (ViewFlipper)findViewById(R.id.flipper); 
     page2 = (ViewFlipper)findViewById(R.id.flipper2); 

     animFlipInForeward = AnimationUtils.loadAnimation(this, R.anim.flipin); 
     animFlipOutForeward = AnimationUtils.loadAnimation(this, R.anim.flipout); 
     animFlipInBackward = AnimationUtils.loadAnimation(this, R.anim.flipin_reverse); 
     animFlipOutBackward = AnimationUtils.loadAnimation(this, R.anim.flipout_reverse); 

     page.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.flipin)); 
     page.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.flipout)); 
     page.startFlipping(); 
     page.setAutoStart(true); 

     page2.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.flipin)); 
     page2.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.flipout)); 
     page2.startFlipping(); 
     page2.setAutoStart(true); 



    } 

    private void SwipeRight(){ 
     page.setInAnimation(animFlipInBackward); 
     page.setOutAnimation(animFlipOutBackward); 
     page.showPrevious(); 
    } 

    private void SwipeLeft(){ 
     page.setInAnimation(animFlipInForeward); 
     page.setOutAnimation(animFlipOutForeward); 
     page.showNext(); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     // TODO Auto-generated method stub 
     return gestureDetector.onTouchEvent(event); 
    } 

    SimpleOnGestureListener simpleOnGestureListener 
    = new SimpleOnGestureListener(){ 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
       float velocityY) { 

      float sensitvity = 50; 
      if((e1.getX() - e2.getX()) > sensitvity){ 
       SwipeLeft(); 
      }else if((e2.getX() - e1.getX()) > sensitvity){ 
       SwipeRight(); 
      } 

      return true; 
     } 

    }; 

    GestureDetector gestureDetector 
    = new GestureDetector(simpleOnGestureListener); 
} 

的问题是,无论我触摸屏幕,第一viewflipper将刷卡。我想要的是,当我触摸一个特定的视图片时,只有被触摸的片段会被滑动。请帮忙吗?

回答

0

您错误地将ViewFlipper实例分配给了pagepage2变量。在下面的代码片段中,这两个语句使用了同样的观点ID,R.id.flipper

page = (ViewFlipper)findViewById(R.id.flipper); 
    page2 = (ViewFlipper)findViewById(R.id.flipper); 

[更新]

此外,您还需要更新您的SwipeRight()SwipeLeft()simpleOnGestureListener,如下(增加了一些方法)。代码现在测试是否在ViewFlipper中启动了一个手指滑动手势,然后滑动该脚蹼。

private void SwipeRight(ViewFlipper vf) { 
    vf.setInAnimation(animFlipInBackward); 
    vf.setOutAnimation(animFlipOutBackward); 
    vf.showPrevious(); 
} 

private void SwipeLeft(ViewFlipper vf) { 
    vf.setInAnimation(animFlipInForeward); 
    vf.setOutAnimation(animFlipOutForeward); 
    vf.showNext(); 
} 

SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener() { 

    @Override 
    public boolean onFling(
      MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 

     ViewFlipper vf = getTouchedViewFlipper(e1); 
     if (vf == null) { 
      return true; 
     } 

     float sensitivity = 50.0; 
     if ((e1.getX() - e2.getX()) > sensitivity) { 
      SwipeLeft(vf); 
     } else if ((e2.getX() - e1.getX()) > sensitivity) { 
      SwipeRight(vf); 
     } 

     return true; 
    } 

}; 

private ViewFlipper getTouchedViewFlipper(MotionEvent ev) { 
    ViewFlipper vf = checkTouchedViewFlipper(page, ev); 
    if (vf == null) { 
     vf = checkTouchedViewFlipper(page2, ev); 
    } 
    return vf; 
} 

private ViewFlipper checkTouchedViewFlipper(ViewFlipper vf, MotionEvent ev) { 
    Rect vfRect; 
    vf.getHitRect(vfRect); 
    return (vfRect.contains((int)ev.getX(), (int)ev.getY())) ? vf : null; 
} 
+0

我编辑了我的答案,但没有解决问题 –

+0

查看我更新的答案。 – cybersam

+0

不幸的是,它没有工作,我更新了我的代码,我在你的答案中改变了唯一的事情是我在方法checkTouchedViewFlipper中初始化了vfRect(Rect vfRect = null)。我仍然无法滑动每个viewflipper –