成都创新互联网站制作重庆分公司

android手势,android手势模拟

android手机有哪些手势操作,能具体点吗?

android手机有哪些手势操作:

创新互联公司主营柯城网站建设的网络公司,主营网站建设方案,重庆App定制开发,柯城h5重庆小程序开发搭建,柯城网站营销推广欢迎柯城等地区企业咨询

“点击”,也叫“单击”,即轻触屏幕一下。无论是搭载何种操作系统的触控手机,这个都是出现频率最高的动作。点击主要用来打开程序,还有功能表(抽屉)。

“点住”,也叫“长按”、“按住”,按住屏幕超过两秒。此动作通常用来调出“菜单”。某些应用程序在界面空白处长按可以调出菜单;某些条目长按也可以弹出菜单,比如当您需要转发短信时,在短信对话界面长按短信内容,必然会弹出菜单,菜单中通常会有“转发”选项。

在进行文字编辑时,点住文字部分,然后调出光标进行精准定位。

当然,此动作也可用于多选、快捷视图,比如在“图库(相册)”中,默认视图下,长按相册文件夹、可对文件夹进行多选操作;打开相册文件夹后,长按照片,同样可对照片进行多选操作,选择完毕后可进行批量操作(发送、删除)。

“拖动”,准确来说应该叫做“按住并拖动”。“拖动”主屏幕编辑时的常见动作,比如对桌面“小组件”或者“图标”进行位置编辑时。另外也用于进度定位,比如播放音乐或者视频时,需要常常拖动进度条。

“双击”就是短时间内连续双击屏幕两次,主要用于快速缩放,比如浏览图片时双击可以快速放大,再次双击可以复位;浏览网页时,对文章正文部分双击可使文字自适应屏幕,当然某些视频播放器双击可切换至全屏模式。

滑动,也算是一个常见操作。主要用于查看屏幕无法完全显示的页面,功能类似鼠标的滚轮。此操作主要用于查看图片、网页、纯文本(短信、邮件、笔记)。

某些视频播放器还定义了特殊功能,比如亮度调节、快进快退,比如“MX Player”、“VPlayer”。

“缩放”动作,是查看图片、网页时最常见的操作,照相时也可使用缩放手势来进行调焦。在MX Player中,甚至可以将视频画面进行缩放。

android 手势判断是横向滑动还是纵向 csdn

对于Android中的手势识别可以从以下三个Listener入手——OnTouchListener、OnGestureListener、OnDoubleTapListener。这三个监听器分别是触摸监听、手势滑动监听和屏幕双击操作监听。很多的时候我们需要这些手势识别的操作,例如我们自定义控件的时候就经常会用到。下面就对这三个监听器分别进行介绍。

触摸监听器OnTouchListener

让我们的Activity去现实此接口,并重写onTouch方法。重写OnTouchListener的onTouch方法 此方法在触摸屏被触摸,即发生触摸事件(接触和抚摸两个事件)的时候被调用。示范代码如下:

@Override

public boolean onTouch(View v, MotionEvent event) {

detector.onTouchEvent(event);

Toast.makeText(this, "onTouch", TIME_OUT).show();

return true;

}

手势滑动监听器OnGestureListener

让我们的Activity去现实此接口,并重写onFling、onLongPress、onScroll、onDown、onShowPress、onSingleTapUp方法。示范代码如下:

/**

* 手势滑动时别调用

*/

@Override

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,

float velocityY) {

if (e1.getX() - e2.getX() FLING_MIN_DISTANCE) {

Toast.makeText(this, "向左滑动", TIME_OUT).show();

} else if (e2.getX() - e1.getX() FLING_MIN_DISTANCE) {

Toast.makeText(this, "向右滑动", TIME_OUT).show();

}

return false;

}

/**

* 长按时被调用

*/

@Override

public void onLongPress(MotionEvent e) {

Toast.makeText(this, "触发长按回调", TIME_OUT).show();

}

/**

* 滚动时调用

*/

@Override

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,

float distanceY) {

Toast.makeText(this, "触发滚动回调", TIME_OUT).show();

return false;

}

/**

* 在按下动作时被调用

*/

@Override

public boolean onDown(MotionEvent e) {

Toast.makeText(this, "按下回调", TIME_OUT).show();

return false;

}

/**

* 按住时被调用

*/

@Override

public void onShowPress(MotionEvent e) {

Toast.makeText(this, "按住不松回调", TIME_OUT).show();

}

/**

* 抬起时被调用

*/

@Override

public boolean onSingleTapUp(MotionEvent e) {

Toast.makeText(this, "触发抬起回调", TIME_OUT).show();

return false;

}

双击屏幕监听器OnDoubleTapListener

让我们的Activity去现实此接口,并重写onDoubleTap、onDoubleTapEvent、onSingleTapConfirmed方法。示范代码如下:

@Override

public boolean onDoubleTap(MotionEvent arg0) {

Toast.makeText(this, "触发双击回调", TIME_OUT).show();

return false;

}

@Override

public boolean onDoubleTapEvent(MotionEvent arg0) {

Toast.makeText(this, "触发双击的按下跟抬起回调", TIME_OUT).show();

return false;

}

@Override

public boolean onSingleTapConfirmed(MotionEvent arg0) {

Toast.makeText(this, "触发单击确认回调", TIME_OUT).show();

return false;

}

Android手势---GestureDetector

GestureDetector 可以使用 MotionEvents 检测各种手势和事件。

这个类只能用于检测触摸事件的 MotionEvent

GestureDetector有三个内部接口,两个内部类

他们都是起到监听器的作用

注意:SimpleOnGestureListener继承了GestureDetector的三个内部接口

GestureDetector自带了五个构造方法,但是有两个被废弃了

因为第三个调用第二个,所以只要关注前面两个就行了

我们发现第二个构造方法中多了一个Handler变量

一般来说,不会使用这个构造方法

但是因为GestureDetector中的数据是给GestureHandler内部类进行处理,这个类会使用Handle,由Handler的知识知道,创建Handler必须有Looper,但是在一些新开的线程中没有创建Looper,所以我们需要传入一个带了Looper的Handler变量,否则,GestureDetector对象会创建失败

按下是所以手势必定有的动作

所以无论什么手势,第一个调用的方法就是onDown

注意:

GestureDetector的点击对图片,按钮等无用

为了解决这个问题,我们可以

这两个方法都可以响应到单击事件,但是他们之间还是有区别的

当我们同时在监听器中覆写这两个方法,并且进行单击事件

我们会发现当进行单击事件的时候,这几个方法响应的顺序是这样的

首先onDown()必定是第一个执行的,但是会发现onSingleTapUp在onSingleComfirmed之前执行

我查阅了相关文档,发现他们虽然同样响应的是当手指离开屏幕的活动,但是 onSingleTapUp是立即执行 ,而 onSingleComfirmed却要在离开后300ms后才执行 ,这样的目的是确认我们进行的是单击事件(为了防止我们在300ms内再次进行单击事件),所以他们的名字分别是Up和Comfirmed

所以,在 设置双击事件时,最好使用onSingleComfirmed(),进行双击时不会回调单击方法

这两个方法都可以响应双击事件,为了验证他们的区别,我们同样在一个响应器中覆写这两个方法,并且进行双击事件(我们这里单击事件使用onSingleComfirmed)

我们使用Log.e()把方法响应的顺序弄出来,发现他们规律很神奇

然后我在onDoubleTapEvent()中吧MotionEvent e 输出,

然后方法响应的顺序变成:

我们对以上信息进行分析:

DoubleTap在DoubleTapEvent前面执行,但是根据DoubleTapEvent的第一个MotionEvent是Down,所以判断 双击的响应条件是在第一次单击后的300ms内按下手指

我们又尝试在双击后手指不离开屏幕,可见随时间的延长,Move也变得更多,

由此判断, onDoubleTapEvent是实时回调的,并且是用来检测MotionEvent

这次我们在响应器中覆写所有方法,进行长按操作

发现方法响应的顺序为:

也就是说,在长按时,onShowPress在onLongPress前面执行

同样,我们覆写所有方法,进行滑动操作,

发现方法的响应顺序为

由此可见,在滑动/拖动过程中,不断调用onScroll,最后调用onFiling

当然,Android自带的手势不能完全满足我们的需求,于是Android提供了自建手势的方法,这些内容将在下一篇博客中陈述

android 手势冲突怎么办

android手势冲突解决方法如下:

方法一:如代码中含有ViewFlipper、ScrollView、ViewPager等有手势反应的组件,且是用FrameLayout包裹的;但却只想触发其中某个组件的手势反应,建议用View.setVisibility()方法,屏蔽掉ViewFlipper、ScrollView、ViewPager等有手势反应组件(比如ViewFlipper.setVisibility()),到合适的时候,再将被屏蔽的组件显示出来。

方法二:如代码中含有ViewFlipper、ScrollView、ViewPager等有手势反应的组件;

但却想根据不同的手势触发不同的组件手势反应,建议继承并重写以上组件,并用ViewGroup.onInterceptTouchEvent方法,拦截所有手势,进而根据不同的手势触发不同的组件。


分享文章:android手势,android手势模拟
本文链接:http://cxhlcq.com/article/dscchge.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部