Android手势研究(textview及listview对比验证)(一)

手势即手触摸屏幕做出动作。

View可以通过onTouchEvent收到触摸屏幕事件,
我们可以通过View.setOnTouchListener()设置事件监听器
或者override onTouchEvent()来拦截这些事件,
在拦截函数中判断触摸点的轨迹及运动速度就可以判断出是什么手势。

Android系统提供了GestureDetector来方便手势的判断,即:在拦截函数中每次touchevent都把事件作为参数调用GestureDetector.onTouchEvent(),当有手势被识别出后,就会通知调用者。

为了能通知到调用者,GestureDetector在构造时要求传入一个实现了OnGestureListener接口的对象,
通过此对象就可以接收到各种手势通知了。

首先先用textview来实验:
用一个ViewFlipper放置两个Textview,当手指在屏幕上左右移动时进行进行切换。
由于textview本身不会处理touchevent,而是会将其继续上传,所以textview布局时layout_width及layout_height没有影响。
如果touch事件发生在textview上会继续上传到viewflipper;如果发生在viewflipper上那么就直接处理。
所以我们应该拦截发生在ViewFlipper上的touchEvent,并进行处理。

代码如下,在onCreate中完成界面布局及事件拦截函数设置:

//创建一个ViewFlipper
mVf = new ViewFlipper(this);
//ViewFlipper打开长点击支持。如果不打开,无法收到长时间点击,那么手势判断就无从进行。
mVf.setLongClickable(true);
//拦截ViewFlipper的touch事件,并使用GestureDetector.onTouchEvent来处理
mVf.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return mVfDetector.onTouchEvent(event);
}
});

//添加一个textview。textview不能setLongClickable(true),
//如果设置了那么发生在textview上的touch事件就无法传给viewflipper,
//无法被手势识别对象处理了。
TextView tv = new TextView(this);
tv.setText("TextView 1");
tv.setBackgroundColor(0xffffffff); //设置一个白色背景,方便看到textview区域
mVf.addView(tv,new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

//再添加一个textview
TextView tv2 = new TextView(this);
tv2.setText("TextView 2");
tv2.setBackgroundColor(0xffffffff);
mVf.addView(tv2,new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

//将viewFlipper作为Activity的主view显示
setContentView(mVf);


在监听器中用到了GestureDetector对象,其是一个类成员对象,用如下代码创建:

private GestureDetector mVfDetector = new GestureDetector(new OnGestureListener() {
//手指在屏幕上移动距离小于此值不会被认为是手势
private static final int SWIPE_MIN_DISTANCE = 120;
//手指在屏幕上移动速度小于此值不会被认为手势
private static final int SWIPE_THRESHOLD_VELOCITY = 200;

//手势识别函数,到此函数被系统回调时说明系统认为发生了手势事件,
//我们可以做进一步判定。
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//如果第1个坐标点大于第二个坐标点,说明是向左滑动
//滑动距离以及滑动速度是额外判断,可根据实际情况修改。
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE &&
Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//left
Log.i("GestureDemo", "ViewFlipper left");
mVf.showNext();
return true;
}else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE &&
Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//right
Log.i("GestureDemo", "ViewFlipper right");
mVf.showPrevious();
return true;
}
return false;
}
... ...
... ...
});
}
Android 10.0 根据包名屏蔽手势导航左右滑动返回手势 在10.0定制化开发中,在匹配第三方app时,对方要求根据包名屏蔽掉系统手势的左右滑动返回手势事件,由app来控制返回功能,所以要求针对SystemUI手势导航做定的修改,具体功能是在SystemUI中实现的 阅读详情

相关推荐

TextViewListView简单用法

NULL 博文链接:https://a-bin.iteye.com/blog/1197564

Android手势传递般过程及其规则研究

1.手势传递般过程 Android 手势传递通过dispatchTouchEvent 、onInterceptTouchEvent(ViewGroup特有)、onTouchEvent View手势过程传递为 dispatchTouchEvent  ----》》onInterceptTouchEvent ----》》onTouchEvent 多嵌套手势传递过程为如图所示   Pa

时雨续之风 2216

android 实现可以放大缩小的TextView

我们在浏览网页时,网页的文本可以放大缩小,android两点手势,两点距离靠近时缩小,两点距离远离时候是放大。那么若果不用android的WebView控件,单纯的TextView能否做到放大缩小呢,其实也是可以的。只要响应处理手势事件即可。

Android 注册屏幕触摸事件拦截事件分发

接到需求,需要实现屏幕双指上下滑动触发对应功能,并且拦截滑动冲突;目前世面上能看到很多类型的功能,比如侧滑返回、三指下滑截屏等等;本次基于Android10,且应用为系统应用!在原生代码暂未发现关于三指滑动的源码,但是好在有侧滑返回源码,在机器上使用可以看到是有处理滑动冲突的。本文基于Android10源码。

一副皮囊的博客 726

ListViewTextView的几种特殊属性解析

1、背景介绍       在开发中,有时候会嵌套使用滑动控件,ListView是最常见的被嵌套的内容,这个时候需要使用很多我们平时很少使用的控件属性,比如禁止获取焦点,设置没有分割线等等。有时候对TextView需要做些特殊的处理,比如说,颜色值、包裹内容、有行数的限制、末尾显示点点省略。       在开发的时候,如果我们常用的包裹内容,可能会出现行数据多,行数据少的情况,这样来,原

ljtyzhr的专栏 1672

【转】Android手势研究textviewlistview对比验证)(

原文地址:http://mypyg.iteye.com/blog/761331   手势即手触摸屏幕做出动作。 View可以通过onTouchEvent收到触摸屏幕事件, 我们可以通过View.setOnTouchListener()设置事件监听器 或者override onTouchEvent()来拦截这些事件, 在拦截函数中判断触摸点的轨迹及运动速度就可以判断出是什么手势Android...

145

【转】Android手势研究textviewlistview对比验证)(二)

原文地址:http://mypyg.iteye.com/blog/761461   在上文中我们对手势操作进行了基本验证, 我们将上文中添加第二个textview的改为添加Listview,代码如下: Java代码   ListView lv = new ListView(this);    lv.setBackgroundColor(0xff808080);    ...

140

Android手势研究textviewlistview对比验证

手势即手触摸屏幕做出动作。 View可以通过onTouchEvent收到触摸屏幕事件, 我们可以通过View.setOnTouchListener()设置事件监听器 或者override onTouchEvent()来拦截这些事件, 在拦截函数中判断触摸点的轨迹及运动速度就可以判断出是什么手势Android系统提供了GestureDetector来方便手势的判断,即

非著名程序员 1860

Android手势研究textviewlistview对比验证)(二)

在上文中我们对手势操作进行了基本验证, 我们将上文中添加第二个textview的改为添加Listview,代码如下: [code="java"] ListView lv = new ListView(this); lv.setBackgroundColor(0xff808080); final String[] items = {"one", "two", "three"}; lv.s...

mypyg的专栏 153

Android聊天消息列表实现精准文字复制与双击查看全文技术方案

Android应用开发中,文本选择与复制是基础交互功能,其核心原理基于TextView的文本选择机制系统ActionMode。通过事件分发与手势识别技术,开发者可以解决复杂布局下的文本选择难题,提升用户体验。这技术方案在IM、社交、办公类App中具有重要价值,能够实现类似微信聊天消息的精准复制内容查看功能。本文深入探讨了Android事件冲突处理、自定义SelectionActionModeCallback以及GestureDetector的应用,帮助开发者构建更流畅的交互体验。

weixin_30920513的博客 317

如何利用uiautomator实现高效Android UI自动化测试:实战深度指南

在移动应用测试领域,Android UI自动化测试工具uiautomator为开发者提供了突破性的解决方案。这个Python封装的Android UI自动化框架,通过创新的设计理念高效的实现机制,让Android设备交互变得前所未有的简单。uiautomator的核心价值在于它无需在Android设备上安装任何额外组件,仅通过ADB连接即可实现完整的UI自动化测试,这为移动应用质量保障提供了现代

gitblog_00905的博客 406

Android开源项目精选:解锁高效开发的完整生态工具箱

我们建议开发者将本项目作为**技术选型参考标准库**,在项目启动阶段快速定位所需组件。与传统零散搜索相比,这种结构化分类方式可节省70%以上的技术调研时间。项目维护者Trinea还提供了配套的**开发助手App**,支持反编译、布局查看、屏幕取色等实用功能,形成了完整的开发工具链生态。 ## 二、核心架构设计理念:模块化分类与质量筛选机制 ### 2.1 四层分类体系架构 项目的核心创新在于

gitblog_00008的博客 777

Android事件分发机制:从原理到实战解决滑动冲突

Android应用开发中,UI交互的流畅性直接关系到用户体验,而触摸事件的处理是其中的核心。触摸事件从硬件层产生后,会经过个由Activity、Window、ViewGroupView构成的视图层级进行传递与处理,这过程被称为事件分发机制。其本质是个决策链与责任链的混合模型,核心在于理解dispatchTouchEvent、onInterceptTouchEventonTouchEvent这三个方法的协作流程与调用顺序。掌握这套机制的技术价值在于,开发者能够从根本上诊断修复诸如点击无响应、滑动

weixin_34122810的博客 307

Android RTL适配实战:从原理到第三方库兼容的完整指南

在移动应用国际化开发中,RTL(从右到左)布局适配是支持阿拉伯语、希伯来语等语言市场的关键技术挑战。其核心原理在于将传统的绝对“左右”思维转换为相对的“起始边(Start)”与“结束边(End)”概念,通过系统级的布局方向自动映射机制,实现UI的自动翻转。这项技术的价值在于保障了产品在全球市场的用户体验致性与界面逻辑正确性,是拓展中东等地区市场的必备能力。在实际应用场景中,开发者不仅需要处理布局属性替换方向性图标资源,更需应对自定义View绘制、动画手势以及第三方SDK兼容性等复杂问题。本文基于实战经验

weixin_34416649的博客 418

Android移动开发-添加手势以及识别用户手势

所谓手势,其实是指用户手指或触摸笔在触摸屏上的连续触碰的行为,比如在屏幕上从左向右划出的个动作,就是手势;再比如在屏幕上画出个圆圈也是手势手势这种连续的触碰会形成某个方向上的移动趋势,也会形成个不规则的几何图形。Android对两种手势行为都是提供了支持。

_彼岸雨敲窗_的博客 1993
上一篇: Android调用系统Activity选取图像部分区域
下一篇: Android手势研究(textview及listview对比验证)(二)
mypyg
博客等级 码龄18年 3粉丝 43原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值