view.setOnTouchListener(new OnTouchListener() {

     @Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
firstX = event.getX();
firstY = event.getY();
//这里不能 return true,否则会导致无法响应onClick
break;
case MotionEvent.ACTION_MOVE:
lastX = event.getX();
lastY = event.getY(); //如果要处理滑动事件,要把事件设置为ACTION_CANCEL,否则会在滑动时触发onClick
if(dispose move event){
MotionEvent cancelEvent = MotionEvent.obtain(event);
cancelEvent.setAction(MotionEvent.ACTION_CANCEL|(event.getActionIndex()<< MotionEvent.ACTION_POINTER_INDEX_SHIFT));
v.onTouchEvent(cancelEvent);
//do something
cancelEvent.recycle();
//return true表示要处理move事件
return true;
} break;
case MotionEvent.ACTION_UP:
return false; }
return v.onTouchEvent(event);
}
});

关键代码

 MotionEvent cancelEvent = MotionEvent.obtain(event);
cancelEvent.setAction(MotionEvent.ACTION_CANCEL|(event.getActionIndex()<< MotionEvent.ACTION_POINTER_INDEX_SHIFT));
v.onTouchEvent(cancelEvent);

MotionEvent.ACTION_CANCEL 不就可以实现取消操作为什么还要加上 |(event.getActionIndex()<< MotionEvent.ACTION_POINTER_INDEX_SHIFT) ?

主要是防止多点操作,这种情况下会进入 MotionEvent.ACTION_POINTER_* 而不是 MotionEvent.ACTION_*

最新文章

  1. PHP数组常用函数
  2. javascript基础01
  3. ca证书校验用户证书
  4. kali linux Python开发环境初始化
  5. Spring Integration - 自动轮询发送手机短信
  6. 序列化(Serialization)据为JSONP远端请求
  7. csrf 跨站请求伪造
  8. 关于centos更新后virtualbox无法使用的问题
  9. qt上用opencv显示摄像头视频
  10. ETL工具的评价
  11. ASP.Net网站部署失败
  12. [改善Java代码]若有必要,使用变长数组
  13. JVM深入:JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)(转)
  14. LBA和CHS转换
  15. mysql 原理 ~ DDL之在线DDL
  16. VSCode TypeScript开发
  17. MySQL 5.7 使用原生JSON类型
  18. zabbix_server.conf 详解
  19. resource not found : rosbridge_server
  20. Flask 学习资源

热门文章

  1. jQuery查找——parent/parents/parentsUntil/closest
  2. Java代理模式/静态代理/动态代理
  3. Nginx+php+fastcgi在win7下的配置
  4. Topcoder SRM570 900 CurvyonRails
  5. 【仿真】Lattice_Diamond_调用Modelsim_仿真
  6. 4种必须知道的Android屏幕自适应解决方案
  7. android 通过WiFi进行adb调试
  8. equals和“==”
  9. Trie树-字典查找
  10. Tomcat Shell脚本(启动|关闭|重启|状态)