我如何检测在onTouch听众点击? [英] How can I detect a click in an onTouch listener?

查看:185
本文介绍了我如何检测在onTouch听众点击?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个滚动视图内ViewPager。我需要能够水平滚动以及垂直。为了实现此有用来关闭垂直滚动每当我的viewPager被触摸( v.getParent()requestDisallowInterceptTouchEvent(真); ),所以它可以被水平滚动

但在同一时间,我需要能够点击viewPager以全屏模式打开它。

的问题是,onTouch被调用的onClick前,我的OnClick不会被调用。

我如何能实现这两个触摸一个onClick?

  viewPager.setOnTouchListener(新OnTouchListener(){

            @覆盖
            公共布尔onTouch(视图V,MotionEvent事件){
                的System.out.println(接触);
                如果(event.getAction()== MotionEvent。???){
                    //打开全屏活动
                }
                。v.getParent()requestDisallowInterceptTouchEvent(真正的); //这不能被删除
                返回false;
            }
        });

        viewPager.setOnClickListener(新OnClickListener(){

            @覆盖
            公共无效的onClick(视图v){
                的System.out.println(点击);
                意图fullPhotoIntent =新的意图(背景下,FullPhotoActivity.class);
                fullPhotoIntent.putStringArrayListExtra(imageUrls,imageUrls);
                startActivity(fullPhotoIntent);
            }
        });
 

解决方案

马苏德Dadashi的回答让我看着办吧。

下面是它的外观到底。

  viewPager.setOnTouchListener(新OnTouchListener(){
            私人浮动STARTX;
            私人浮动startY;
            @覆盖
            公共布尔onTouch(视图V,MotionEvent事件){
                开关(event.getAction()){
                案例MotionEvent.ACTION_DOWN:
                    STARTX = event.getX();
                    startY = event.getY();
                    打破;
                案例MotionEvent.ACTION_UP:{
                    浮endX = event.getX();
                    浮恩迪= event.getY();
                    如果(isAClick(STARTX,endX,startY,恩迪)){
                        launchFullPhotoActivity(imageUrls); //我们有一个点击!
                    }
                    打破;
                }
                }
                。v.getParent()requestDisallowInterceptTouchEvent(真正的); //具体到我的项目
                返回false; //具体到我的项目
            }
 

 私人布尔isAClick(STARTX浮动,浮动endX,浮startY,浮恩迪){
    浮differenceX = Math.abs(STARTX  -  endX);
    浮differenceY = Math.abs(startY  - 恩迪);
    如果(differenceX> C.CLICK_ACTION_THRESHHOLD / * = 5 * / || differenceY> C.CLICK_ACTION_THRESHHOLD){
      返回false;
    }
   返回true;
}
 

I have a ViewPager inside a scroll view. I need to be able to scroll horizontally as well as vertically. In order to achieve this had to disable the vertical scrolling whenever my viewPager is touched (v.getParent().requestDisallowInterceptTouchEvent(true);), so that it can be scrolled horizontally.

But at the same time I need to be able to click the viewPager to open it in full screen mode.

The problem is that onTouch gets called before onClick and my OnClick is never called.

How can I implement both on touch an onClick?

viewPager.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                System.out.println("TOUCHED ");
                if(event.getAction() == MotionEvent.???){
                    //open fullscreen activity
                }
                v.getParent().requestDisallowInterceptTouchEvent(true); //This cannot be removed
                return false;
            }
        });

        viewPager.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                System.out.println("CLICKED ");
                Intent fullPhotoIntent = new Intent(context, FullPhotoActivity.class);
                fullPhotoIntent.putStringArrayListExtra("imageUrls", imageUrls);
                startActivity(fullPhotoIntent);
            }
        });

解决方案

Masoud Dadashi's answer helped me figure it out.

here is how it looks in the end.

viewPager.setOnTouchListener(new OnTouchListener() {
            private float startX;
            private float startY;
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    startX = event.getX();
                    startY = event.getY();
                    break;
                case MotionEvent.ACTION_UP: {
                    float endX = event.getX();
                    float endY = event.getY();
                    if (isAClick(startX, endX, startY, endY)) { 
                        launchFullPhotoActivity(imageUrls);// WE HAVE A CLICK!!
                    }
                    break;
                }
                }
                v.getParent().requestDisallowInterceptTouchEvent(true); //specific to my project
                return false; //specific to my project
            }

.

private boolean isAClick(float startX, float endX, float startY, float endY) {
    float differenceX = Math.abs(startX - endX);
    float differenceY = Math.abs(startY - endY);
    if (differenceX > C.CLICK_ACTION_THRESHHOLD/* =5 */ || differenceY > C.CLICK_ACTION_THRESHHOLD) {
      return false;
    }
   return true;
} 

这篇关于我如何检测在onTouch听众点击?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆