zoukankan      html  css  js  c++  java
  • 在Android中区分点击和滑动操作

    转自:http://blog.csdn.net/do168/article/details/51587933

    最近在写一个图片浏览安卓应用,想要弄成全屏显示,只在单击时显示工具栏和状态栏,在触摸滑动时翻页。经过几个小时在互联网上的搜索也没找到合适的例子尴尬

    知道Android Studio的模板里有一个全屏的模板,于是使用android studio中的全屏模板新建了一个工程,启动测试了一下。应用启动时就自动隐藏了工具栏和状态栏,点击屏幕后会重新显示出来,正是我所需要的。哇,真不错吐舌头

    但也有问题,触摸滑动和点击居然不分家,最终都会触发点击事件。这该怎么办呢?研究了一下setOnTouchListener事件,发现该事件最后的返回值可以影响是否还会执行后面的点击事件。也就是返回true不执行后面的事件,返回false则继续执行后面的事件。

    于是写了下面的代码,来区分用户的操作意图,从页触发不同的事件。

     1     private static float DownX = 0;
     2     private static float DownY = 0;
     3     private static float moveX = 0;
     4     private static float moveY = 0;
     5     private static long currentMS = 0;   
     6 
     7    。。。。。。
     8 
     9  mContentView.setOnTouchListener(new View.OnTouchListener() {  
    10         @Override  
    11         public boolean onTouch(View v, MotionEvent event) {  
    12             switch (event.getAction()) {  
    13                 case MotionEvent.ACTION_DOWN:  
    14                     DownX = event.getX();//float DownX  
    15                     DownY = event.getY();//float DownY  
    16                     moveX = 0;  
    17                     moveY = 0;  
    18                     currentMS = System.currentTimeMillis();//long currentMS     获取系统时间  
    19                     break;  
    20                 case MotionEvent.ACTION_MOVE:  
    21                     moveX += Math.abs(event.getX() - DownX);//X轴距离  
    22                     moveY += Math.abs(event.getY() - DownY);//y轴距离  
    23                     DownX = event.getX();  
    24                     DownY = event.getY();  
    25                     break;  
    26                 case MotionEvent.ACTION_UP:  
    27                     long moveTime = System.currentTimeMillis() - currentMS;//移动时间  
    28                     //判断是否继续传递信号  
    29                     if(moveTime>200&&(moveX>20||moveY>20)){  
    30                         return true; //不再执行后面的事件,在这句前可写要执行的触摸相关代码。点击事件是发生在触摸弹起后  
    31                     }  
    32                     break;  
    33             }  
    34             return false;//继续执行后面的代码  
    35         }  
    36     });  


    上面的代码通过计算触摸时间和触摸期间移动的距离来判断用户的操作意图。

    当触摸时间较长,并且移动了一定距离后,我们就断定发生了触摸滑动操作,并返回true,下再引发后面的事件;否则继续触发后面的点击事件。

    我建了一个Git仓库,存放我尝试过的例子,完整 代码都放在那里。

    https://code.csdn.NET/do168/androidtestcenter

    欢迎下载

  • 相关阅读:
    svn提交时强制添加注释 (转)
    通过IIS调试ASP.NET项目
    当前标识(IIS APPPOOLDefaultWebSite)没有对“C:WindowsMicrosoft.NETFramework64v2.0.50727Temporary ASP.NET Files“的写访问权限
    (转)WPF控件开源资源
    redhat7系统安装kerberos报错
    centos7
    spark-sql与Hive元数据共享
    hive-llap配置
    spark-二次排序
    kylin3.1基于ambari2.7.5部署总结
  • 原文地址:https://www.cnblogs.com/neo-java/p/7081418.html
Copyright © 2011-2022 走看看