[GestureDetector.OnGestureListener] [1]类的方法有[onSingleTapUp(MotionEvent)] [2]:

Notified When a tap Occurs with the up MotionEvent que triggered it.

这种方法具有相同的onclick功能?我可以使用此方法从onclick方法实现我想要的相同行为吗?

解决方法

我做了一些测试,似乎答案是肯定的,你可以使用onSingleTapUp而不是onclick. onSingleTapUp方法可以很好地区分双击或长按的简单点击.我的测试:
public class MainFragmentScrollerController
{
    private MainFragment mFragment;
    private GestureDetectorCompat mGestureDetector;

    public MainFragmentScrollerController(MainFragment fragment)
    {
        mFragment = fragment;
        mGestureDetector = new GestureDetectorCompat(mFragment.getActivity(),new GestureListener());
    }

    public void setGestureListener()
    {
        mFragment.myView.setonTouchListener(new OnTouchListener()
        {
            @Override
            public boolean onTouch(View v,MotionEvent event)
            {
                boolean gestureResult = mGestureDetector.onTouchEvent(event);
                Log.i("GestureListener","gestureResult = " + gestureResult);
                return gestureResult;
            }
        });
    }

    public class GestureListener extends SimpleOnGestureListener
    {
        private final String TAG = "GestureListener";
        @Override
        public boolean onDown(MotionEvent event)
        {
            Log.d(TAG,"onDown: " + event.toString()); 
            return true;
        }

        @Override
        public boolean onFling(MotionEvent event1,MotionEvent event2,float veLocityX,float veLocityY)
        {
            Log.d(TAG,"onFling: " + event1.toString()+event2.toString());
            return true;
        }

        @Override
        public boolean onScroll(MotionEvent event1,float distanceX,float distanceY)
        {
            Log.d(TAG,"onScroll: " + event1.toString()+event2.toString());
            return true;
        }

        @Override
        public boolean onSingleTapUp(MotionEvent event)
        {
            Log.d(TAG,"onSingleTapUp: " + event.toString());
            return true;
        }

        @Override
        public void onLongPress(MotionEvent event)
        {
            Log.d(TAG,"onLongPress: " + event.toString());
        }
    }
}

简单点击的结果:

09-04 14:20:58.040: D/GestureListener(17689): onDown: MotionEvent { action=ACTION_DOWN,id[0]=0,x[0]=188.71875,y[0]=26.0625,toolType[0]=TOOL_TYPE_FINGER,buttonState=0,MetaState=0,flags=0x0,edgeFlags=0x0,pointerCount=1,historySize=0,eventTime=34463725,downTime=34463725,deviceid=1,source=0x1002 }
09-04 14:20:58.040: I/GestureListener(17689): gestureResult = true
09-04 14:20:58.100: I/GestureListener(17689): gestureResult = false
09-04 14:20:58.130: D/GestureListener(17689): onSingleTapUp: MotionEvent { action=ACTION_UP,eventTime=34463811,source=0x1002 }
09-04 14:20:58.130: I/GestureListener(17689): gestureResult = true

长按结果:

09-04 14:22:12.520: D/GestureListener(17689): onDown: MotionEvent { action=ACTION_DOWN,x[0]=179.22656,y[0]=41.0625,eventTime=34538199,downTime=34538199,source=0x1002 }
09-04 14:22:12.520: I/GestureListener(17689): gestureResult = true
09-04 14:22:12.560: I/GestureListener(17689): gestureResult = false
09-04 14:22:12.930: I/GestureListener(17689): gestureResult = false
09-04 14:22:12.950: I/GestureListener(17689): gestureResult = false
09-04 14:22:13.010: I/GestureListener(17689): gestureResult = false
09-04 14:22:13.100: I/GestureListener(17689): gestureResult = false
09-04 14:22:13.130: I/GestureListener(17689): gestureResult = false
09-04 14:22:13.150: I/GestureListener(17689): gestureResult = false
09-04 14:22:13.180: I/GestureListener(17689): gestureResult = false
09-04 14:22:13.200: D/GestureListener(17689): onLongPress: MotionEvent { action=ACTION_DOWN,source=0x1002 }
09-04 14:22:13.230: I/GestureListener(17689): gestureResult = false

投掷结果:

09-04 14:24:09.650: D/GestureListener(17689): onDown: MotionEvent { action=ACTION_DOWN,x[0]=332.15625,y[0]=2.625,eventTime=34655337,downTime=34655337,source=0x1002 }
09-04 14:24:09.650: I/GestureListener(17689): gestureResult = true
09-04 14:24:09.690: D/GestureListener(17689): onScroll: MotionEvent { action=ACTION_DOWN,source=0x1002 }MotionEvent { action=ACTION_MOVE,x[0]=331.9604,y[0]=-72.36835,historySize=2,eventTime=34655368,source=0x1002 }
09-04 14:24:09.690: I/GestureListener(17689): gestureResult = true
09-04 14:24:09.710: D/GestureListener(17689): onScroll: MotionEvent { action=ACTION_DOWN,x[0]=337.91425,y[0]=-124.40411,eventTime=34655385,source=0x1002 }
09-04 14:24:09.710: I/GestureListener(17689): gestureResult = true
09-04 14:24:09.730: D/GestureListener(17689): onFling: MotionEvent { action=ACTION_DOWN,source=0x1002 }MotionEvent { action=ACTION_UP,eventTime=34655414,source=0x1002 }
09-04 14:24:09.730: I/GestureListener(17689): gestureResult = true

Android中点击和点按的区别的更多相关文章

  1. Swift开发教程--如何自定义TabBarItem的图片显示

    在做项目的时候,如果使用系统的UITabBarController的时候,底部的tab自定义图片显示是蓝色和灰色的,这不是我们所想要的效果。如果想显示自定义的按下和弹起的图片效果,这个时候就需要对TabBarItem进行修改。以下就是具体的示例:varitemNameArray:[String]=["down_32","add_32","plane_32","circle_32"]varitemNameSelectArray:[String]=["down_click_32","add_click_32"

  2. 如何在Swift(iOS,Xcode)中将NSDictionary转换为Json String?

    .我的NSDictionary是这样的:但如果我打印这个,输出是这样的:我怎样才能得到精确的Json字符串?无需实现这种复杂的逻辑,你可以简单地做到这一点如果你想用API发送它到服务器,甚至不需要将它转换为String

  3. android – 当从View的LongPress触发DOWN事件时,从Dialog注册UP / CANCEL

    我有一个UX要求,即用户通过长按GridView中的单元格来触发Dialog.>显示对话框时,用户必须能够在屏幕周围移动手指/拇指,而不会在离开GridView单元格边界时触发UP/CANCEL事件.>当用户最终断开与屏幕的联系时,我正在寻找捕获.GridView似乎记录了UP/CANCEL的一些误报,我们没有看到使用任何其他视图.>问题是原始视图捕获所有触摸事件,因为DOWN被它捕获.>在原始视

  4. android – 按钮上的单击,按下和释放事件

    如何检测按钮的单击,按下和释放状态.我想在这些状态下执行不同的功能.点击我想调用function1,按下我想调用function2然后在接收时我想调用function3.我们可以使用View.OnClickListener检测点击状态.我们可以使用View.OnTouchListener检测Button的pressed和Released状态,并处理ACTION_DOWN和ACTION_UP.我能够

  5. android – 触摸时绘制圆圈

    我想画一个用户触摸屏幕的圆圈.解决方法我会这样做:

  6. Android中点击和点按的区别

    我可以使用此方法从onclick方法实现我想要的相同行为吗?

  7. 在Android中获取onTouch ACTION_MOVE事件的速度

    用户在手势时拖动手指的速度较慢或者更快,所以我想我需要计算两个中间触点之间的速度:lastTouchedPointX,lastTouchedPointY和event.getX(),event.getY().以前有人做过吗?

  8. android – MotionEvent中ACTION_CANCEL和ACTION_UP有什么区别?

    我想在屏幕上跟踪手指触摸.那么我做的是在MotionEvent触发ACTION_DOWN时开始记录位置,但是如何知道动作完成时间,ACTION_CANCEL或ACTION_UP?他们之间有什么区别?

  9. AmazeUI 网格的实现示例

    这篇文章主要介绍了AmazeUI 网格的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  10. jQuery 自定义下拉框(DropDown)附源码下载

    这篇文章主要介绍了jQuery 自定义下拉框(DropDown)的相关资料,需要的朋友可以参考下

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部