感谢大佬:https://www.cnblogs.com/zkb-0928/p/3768209.html 感谢大佬:https://blog.csdn.net/sweiqin/article/details/50847996

在android开发中,我们经常会用到一种非常方便的效果,就是左右或上下滑动进行切换内容或控件,比如要删除一条信息,向左滑动会出现一个删除功能键进行删除。

要实现这个功能我们就可以使用onTouch事件来处理,具体代码如下:

package com.example.text;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView; public class MainActivity extends Activity {
private TextView txtTest; private float moveX;
private float moveY;
private float pressX;
private float pressY; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); txtTest = (TextView)findViewById(R.id.txtTest); txtTest.setOnTouchListener(new OnTouchListener() { @Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
//按下
case MotionEvent.ACTION_DOWN:
pressX = event.getX();
pressY = event.getY();
break;
//移动
case MotionEvent.ACTION_MOVE:
moveX = event.getX();
moveY = event.getY();
break;
//松开
case MotionEvent.ACTION_UP:
if (moveX-pressX > 0 && Math.abs(moveY - pressY) < 50) {
Log.i("message", "向右");
} else if (moveX - pressX < 0 && Math.abs(moveY - pressY) < 50) {
Log.i("message", "向左");
}
break;
default:
break;
}
return true;
}
});
} }
1、
若return false说明没有成功执行onTouch事件,在执行完onTouch里面的代码之后,onTouch事件并没有结束。因此某些组件如Gallery会自动执行它所在view里onTouch方法的代码。若在onTouch方法里面增加你的代码并且最后return false就会执行你在OnTouch方法中的处理操作了。 

2、
若return true说明你已经成功执行onTouch方法了,在执行完onTouch中的代码之后,这个onTouch事件就结束了。也不会再调用组件如Gallery默认的onTouch方法了。在onTouch方法中,我们可以做很多操作,如move,down,up等等,若我们在move里面return false,那么接着的fling,up等后面的事件也不会处理。 

Gallery.setOnTouchListener(new OnTouchListener(){  

    //@Override  
    public boolean onTouch(View v, MotionEvent event) {  
System.out.println("Gallery onTouch");  
if(event.getAction()==MotionEvent.ACTION_MOVE){  
   mDismiss.removeMessages(1);  
   System.out.println("ACTION_MOVE ");  
     
}else if(event.getAction()==MotionEvent.ACTION_UP){  
   mDismiss.sendEmptyMessageDelayed(1,10000);  
   System.out.println("ACTION_UP ");  
}  
return false;  
    }  
      
}); 
 
注意:
1.
在ViewGroup中onInterceptTouchEvent方法若反回false,那么触屏事件会继续向下传递,但如果没有子View去处理这个事件,即子view的onTouchEvent没有返回True,则最后还是由ViewGroup去处理这个事件,也就又执行了自己的onTouchEvent。
2.
onTouch调用前会自动调用onInterceptTouchEvent 如果onInterceptTouchEvent返回的false,则不会调用onTouchEvent,若重写onInterceptTouchEvent让它在需要调用onTouchEvent时返回true

最新文章

  1. iOS 关于修饰代理用weak还是assign
  2. saltstack-部署
  3. Mysql数据库连接、查询、记录集操作代码
  4. Collection_Other
  5. Consistent Hashing原理与实现
  6. Application_Start
  7. Redis c/c++, java client连接
  8. vue指令v-for示例解析
  9. sharePreference
  10. Java高并发秒杀系统API之SSM框架集成swagger与AdminLTE
  11. Hecher学生互助平台(团队项目第一次)
  12. Android 开发中 SQLite 数据库的使用
  13. SQL SERVER数据库删除LOG文件和清空日志的方案
  14. SQLI DUMB SERIES-9&amp;&amp;10
  15. websocket搭建错误
  16. MVC 开发模式
  17. 通过Windows Compatibility Pack补充.net core中缺失的api
  18. JAXB--@XmlType注解标注xml生成顺序
  19. 【Hight Performance Javascript】——脚本加载和运行
  20. 【Kendo UI系列开发使用笔记】01-简单介绍

热门文章

  1. Capstone CS5266替代AG9311 Type-C转HDMI带PD3.0+USB3.0拓展坞方案
  2. SROP
  3. Java高级程序设计笔记 • 【第6章 设计模式】
  4. Java面向对象笔记 • 【第4章 抽象类和接口】
  5. docker学习:docker容器数据卷
  6. Kerberos打开debug日志
  7. CSS基础 阴影相关属性设置
  8. CentOS 7 如何清空文件内容
  9. zabbix监控图形中文乱码的解决方法
  10. koa路由接口