博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 手势
阅读量:6367 次
发布时间:2019-06-23

本文共 4952 字,大约阅读时间需要 16 分钟。

前言:android的手势可以通过gestureDetector类完成。

实现手势方式

1)通过重写onTouchEvent方法

2)实现OnTouchListener类,重写onTouch方法。

不管哪一种,都需要将touch事件交给gestureDetector来管理。

private GestureDetector gestureDetector;@Override    public void onCreate(Bundle savedInstanceState) {gestureDetector = new GestureDetector(this);}@Override    public boolean onTouchEvent(MotionEvent event) {        return gestureDetector.onTouchEvent(event);    }

现在我们就简单的实现一个图片翻页的效果。

1.xml布局

View Code

2.重写OnGestureListener的onFling方法

onFling--快速的在屏幕上滑动,如果不够快,只有onScroll事件了。

除了onFling方法外,还需要从写以下方法

onDown --放第一时间手指接触到屏幕的时候

onShowPress--按住屏幕,但是未达到onLongPress时间前

onSingleTapUp--onDown之后,离开屏幕。如果有onShowPress、onLongPress事件,则不在响应

onScroll--滑动事件,不管快慢,都会响应

onLongPress--长按事件

//按下的时候触发    @Override    public boolean onDown(MotionEvent e) {        Log.e("GestureActivity", "onDown--"+e.getAction());        return false;    }    //按住 且为达到onLongPress之前 调用 一旦调用就不会有onSingleTapUp    @Override    public void onShowPress(MotionEvent e) {        Log.e("GestureActivity", "onShowPress");    }    // 离开屏幕的一刹那    @Override    public boolean onSingleTapUp(MotionEvent e) {        Log.e("GestureActivity", "onSingleTapUp");        return false;    }    // 滚动     @Override    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,            float distanceY) {        Log.e("GestureActivity", "onScroll");        return false;    }    // 长按 不松开    @Override    public void onLongPress(MotionEvent e) {        Log.e("GestureActivity", "onLongPress");    }
View Code

关于onFling实现图片翻页的逻辑

private int images[] = new int[] { R.drawable.facebook, R.drawable.google,            R.drawable.gtalk };//定义了展示的图片    private final int X_MOVE_INSTANCE=100;//X轴位移距离    private final int X_MOVE_SPEED=200;//X轴移动速度 随便大点都几千    private int position=0;//图片初始值@Override    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,            float velocityY) {        Log.e("GestureActivity", "onFling" );        //右翻        if((e2.getX()-e1.getX()>X_MOVE_INSTANCE)&&velocityX>X_MOVE_SPEED){                        imageView.setImageResource(images[++position%images.length]);        }else //左翻            if((e1.getX()-e2.getX()>X_MOVE_INSTANCE)&&Math.abs(velocityX)>X_MOVE_SPEED){                                imageView.setImageResource(images[++position%images.length]);            }                        return false;    }

需要稍微注意下

++position%images.length的写法。 完整代码如下
1 public class GestureActivity extends Activity implements OnGestureListener { 2     private ImageView imageView; 3     private GestureDetector gestureDetector; 4     private int images[] = new int[] { R.drawable.facebook, R.drawable.google, 5             R.drawable.gtalk }; 6     private final int X_MOVE_INSTANCE=100;//X轴位移距离 7     private final int X_MOVE_SPEED=200;//X轴移动速度 随便大点都几千 8     private int position=0;//图片初始值 9 10     @Override11     public void onCreate(Bundle savedInstanceState) {12         super.onCreate(savedInstanceState);13         setContentView(R.layout.main);14 15         imageView = (ImageView) findViewById(R.id.imageView);16         imageView.setImageResource(images[position]);17         gestureDetector = new GestureDetector(this);18 19     }20 21     @Override22     public boolean onTouchEvent(MotionEvent event) {23         return gestureDetector.onTouchEvent(event);24     }25     26     //按下的时候触发27     @Override28     public boolean onDown(MotionEvent e) {29         Log.e("GestureActivity", "onDown--"+e.getAction());30         return false;31     }32 33     //按住 且为达到onLongPress之前 调用 一旦调用就不会有onSingleTapUp34     @Override35     public void onShowPress(MotionEvent e) {36         Log.e("GestureActivity", "onShowPress");37 38     }39 40     // 离开屏幕的一刹那41     @Override42     public boolean onSingleTapUp(MotionEvent e) {43         Log.e("GestureActivity", "onSingleTapUp");44         return false;45     }46 47     // 滚动 48     @Override49     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,50             float distanceY) {51         Log.e("GestureActivity", "onScroll");52         return false;53     }54 55     // 长按 不松开56     @Override57     public void onLongPress(MotionEvent e) {58         Log.e("GestureActivity", "onLongPress");59 60     }61 62     // 快速滑动 并且松开 慢的话只有onScroll63     @Override64     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,65             float velocityY) {66         Log.e("GestureActivity", "onFling" );67         //右翻68         if((e2.getX()-e1.getX()>X_MOVE_INSTANCE)&&velocityX>X_MOVE_SPEED){69             70             imageView.setImageResource(images[++position%images.length]);71         }else //左翻72             if((e1.getX()-e2.getX()>X_MOVE_INSTANCE)&&Math.abs(velocityX)>X_MOVE_SPEED){73                 74                 imageView.setImageResource(images[++position%images.length]);75             }76         77         78         return false;79     }80 }
View Code

 

 

 

 

转载地址:http://rrema.baihongyu.com/

你可能感兴趣的文章
Debian 考虑重新加入 FFmpeg
查看>>
《淘宝店铺 大数据营销+SEO+爆款打造 一册通》一一1.4 淘宝店铺转化率优化
查看>>
《技术的潜能:商业颠覆、创新与执行》一一1.4基因技术
查看>>
《设计工作室生存手册》—第1章1.5节设计师的工作要有系统
查看>>
《Cisco QoS认证考试指南(第2版)》——6.4节基于类的整形配置
查看>>
《顿悟时刻:设计大师访谈录》—第1章Heinz Edelmann 每过十年,烧掉你的作品集...
查看>>
当极客 (Geek) 遇到呆瓜 (Nerd)
查看>>
Angular 1 vs. Angular 2 深度比较
查看>>
《互联网金融投资理财一册通》导读
查看>>
《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一2.2 性能分析工具...
查看>>
Javascript 闭包与作用域
查看>>
《Python Cookbook(第3版)中文版》——6.5 将字典转换为XML
查看>>
Docker 容器互联方法
查看>>
暗渡陈仓:用低消耗设备进行破解和渗透测试1.2.1 运行Deck的设备
查看>>
C编程vim初步配置
查看>>
阿里云文件存储SMB协议服务及其申请和使用指南
查看>>
《Spring实战(第4版)》——2.6 小结
查看>>
《Java和Android开发学习指南(第2版)》—— 2.8 操作符
查看>>
《PhoneGap移动应用开发手册》——1.3节调整加速计传感器更新时间间隔
查看>>
《HttpClient官方文档》2.5 连接驱逐策略
查看>>