Android ViewPager中的onTouchListener

Android ViewPager中的onTouchListener,android,android-viewpager,android-imageview,Android,Android Viewpager,Android Imageview,我有一个ImageView,在ViewPager中有onTouchListener。当然,当我试图更改ViewPager的页面时,ImageView的侦听器会启动。有什么办法可以预防吗。我想我需要从刷卡中识别触摸 这是我的代码摘录: public class ServerDetailFragment extends Fragment implements SimpleGestureListener { GestureDetector detector; SimpleOnGestureListen

我有一个
ImageView
,在
ViewPager
中有
onTouchListener
。当然,当我试图更改
ViewPager
的页面时,
ImageView
的侦听器会启动。有什么办法可以预防吗。我想我需要从刷卡中识别触摸

这是我的代码摘录:

public class ServerDetailFragment extends Fragment implements SimpleGestureListener {
GestureDetector detector;
SimpleOnGestureListener gestures = new SimpleOnGestureListener() {
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        Log.e("TAG", "onFling");
        return true;
    };
};
....


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    detector = new GestureDetector(ServerDetailFragment.this.getActivity(), gestures);

}

....

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_server_detail, container, false);
    MyPagerAdapter adapter = new MyPagerAdapter();
    myPager = (ViewPager) rootView.findViewById(R.id.detail_pager);
    myPager.setAdapter(adapter);
    myPager.setCurrentItem(0);
    myPager.setOffscreenPageLimit(4);

    ViewTreeObserver vto = myPager.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            pagerGraph = (ImageView) myPager.findViewWithTag(myPager.getCurrentItem()).findViewById(R.id.pagerView);
            pagerPb = (ProgressBar) myPager.findViewWithTag(myPager.getCurrentItem()).findViewById(R.id.pagerPb);
            if (init) {

                plotFakeData();

                // Following problematic part is also in ViewPager's onPageChangeListener

                        pagerGraph.setOnTouchListener(new OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        if (detector.onTouchEvent(event)) {

                            // some more code here

                        }
                        return false;
                    }

                });

                // myPager.setCurrentItem(0);
            }
            init = false;
        }
    });

我会这样说:

public class OnSwipeTouchListener implements OnTouchListener {

private final GestureDetector gestureDetector = new GestureDetector(new GestureListener());

public boolean onTouch(final View v, final MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
}

private final class GestureListener extends SimpleOnGestureListener {

    private static final int SWIPE_THRESHOLD = 100;
    private static final int SWIPE_VELOCITY_THRESHOLD = 100;

    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        onTouch(e);
        return true;
    }


    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        boolean result = false;
        try {
            float diffY = e2.getY() - e1.getY();
            float diffX = e2.getX() - e1.getX();
            if (Math.abs(diffX) > Math.abs(diffY)) {
                if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                    if (diffX > 0) {
                    } else {
                    }
                }
            } else {
               // onTouch(e);
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return result;
    }
}
public void onTouch(MotionEvent e) {
}
}
这样称呼他们:

pagerGraph.setOnTouchListener(new OnSwipeTouchListener() {          
public void onTouch(MotionEvent event) {
    // your code here
});

如果只是从ImageView的OnTouchListener返回
false
,会怎么样?这将允许ViewPager接收触摸事件。ViewPager可以接收事件。我想要的是ImageView不接收更改页面的尝试。您是否尝试使用忽略ImageView中的滑动事件?我尝试过,但我不知道如何仅为ImageView实现手势检测器。如果有任何帮助,我将不胜感激。现在不推荐使用该GestureDetector构造函数,因此您可以使用活动上下文构造侦听器,然后在该点上实例化GestureDetector。我相信您绝对正确。但是,当我回答这个问题时,你会发现:)没有书面政策规定“当答案过时时该怎么办”。我很想告诉你,如果你想把它加入我的答案中,那就去做吧——但我认为这不是正确的方式。你可以把它添加为一个全新的答案,比如说-从4.X.Y版开始…如果你想学究的话,这个构造器从2009年4月就被弃用了,所以你是对的,我应该创建一个新的答案…再次,正如我所说,你是绝对正确的,如果你认为有更好的解决办法,欢迎你回答任何问题