简答手势的基本要求是什么有

手势语有哪些?有哪些图片?
你的回答完美的解决了我的问题,谢谢!
为您推荐:
作业君找到的参考例题:
【问题】:有哪些手势语?(要有怎么做)【答案】:&p&嗯,英文单词&A-Z.&&/p&&p&图片:&/p&&p&~~~~~~~~~~~~~~~~~&/p&&p&~樱&/p&&p&&img class=&ikqb_im...
扫描下载二维码Android(59)
简述Android触摸屏手势识别
很多时候,利用触摸屏的Fling、Scroll等Gesture(手势)操作来操作会使得应用程序的用户体验大大提升,比如用Scroll手势在 浏览器中滚屏,用Fling在阅读器中翻页等。在Android系统中,手势的识别是通过 GestureDetector.OnGestureListener接口来实现的,不过William翻遍了Android的官方文档也没有找到一个相 关的例子,API Demo中的TouchPaint也仅仅是提到了onTouch事件的处理,没有涉及到手势。Android Developer讨论组里也有不少人有和我类似的问题,结合他们提到的方法和我所做的实验,我将给大家简单讲述一下Android中手势识别的实现。
我们先来明确一些概念,首先,Android的事件处理机制是基于Listener(监听器)来实现的,比我们今天所说的触摸屏相关的事件,就是 通 过onTouchListener。其次,所有View的子类都可以通过setOnTouchListener()、 setOnKeyListener()等方法来添加对某一类事件的监听器。第三,Listener一般会以Interface(接口)的方式来提供,其中 包含一个或多个abstract(抽象)方法,我们需要实现这些方法来完成onTouch()、onKey()等等的操作。这样,当我们给某个view设
置了事件Listener,并实现了其中的抽象方法以后,程序便可以在特定的事件被dispatch到该view的时候,通过callbakc函数给予适 当的响应。
看一个简单的例子,就用最简单的TextView来说明(事实上和ADT中生成的skeleton没有什么区别)。
public class GestureTest extends Activity implements OnTouchListener{&
&& @Override&
&&& protected void onCreate(Bundle savedInstanceState) {&
&&&&&& super.onCreate(savedInstanceState);&
&&&&&& setContentView(R.layout.main);&
&&&&&& // init TextView&
&&&&&&& TextView tv = (TextView) findViewById(R.id.page);&
&&&&&&& // set OnTouchListener on TextView&
&&&&&& tv.setOnTouchListener(this);&
&&&&&& // show some text&
&&&&&&& tv.setText(R.string.text);&
&&& @Override&
&&& public boolean onTouch(View v, MotionEvent event) {&
&&&&&&& Toast.makeText(this, &onTouch&, Toast.LENGTH_SHORT).show();&
我们给TextView的实例tv设定了一个onTouchListener,因为GestureTest类实现了 OnTouchListener 接口,所以简单的给一个this作为参数即可。onTouch方法则是实现了OnTouchListener中的抽象方法,我们只要在这里添加逻辑代码即 可在用户触摸屏幕时做出响应,就像我们这里所做的——打出一个提示信息。
这里,我们可以通过MotionEvent的getAction()方法来获取Touch事件的类型,包括 ACTION_DOWN, ACTION_MOVE, ACTION_UP, 和ACTION_CANCEL。ACTION_DOWN是指按下触摸屏,ACTION_MOVE是指按下触摸屏后移动受力点,ACTION_UP则是指松 开触摸屏,ACTION_CANCEL不会由用户直接触发(所以不在今天的讨论范围,请参考 ViewGroup.onInterceptTouchEvent(MotionEvent))。借助对于用户不同操作的判断,结合getRawX()、
getRawY()、getX()和getY()等方法来获取坐标后,我们可以实现诸如拖动某一个按钮,拖动滚动条等功能。待机可以看看 MotionEvent类的文档,另外也可以看考TouchPaint例子。
回到今天所要说的重点,当我们捕捉到Touch操作的时候,如何识别出用户的Gesture?这里我们需要 GestureDetector.OnGestureListener接口的帮助,于是我们的GestureTest类就变成了这个样子。
public class GestureTest extends Activity implements OnTouchListener,&
&&&&&&& OnGestureListener {&
随后,在onTouch()方法中,我们调用GestureDetector的onTouchEvent()方法,将捕捉到的 MotionEvent交给 GestureDetector 来分析是否有合适的callback函数来处理用户的手势。
@Override&
&&& public boolean onTouch(View v, MotionEvent event) {&
&&&&&&& // OnGestureListener will analyzes the given motion event&
&&&&&& return mGestureDetector.onTouchEvent(event);&
接下来,我们实现了以下6个抽象方法,其中最有用的当然是onFling()、onScroll()和onLongPress()了。我已经把每 一个方法代表的手势的意思写在了注释里,大家看一下就明白了。
// 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
@Override&
public boolean onDown(MotionEvent e) {&
&&& // TODO Auto-generated method stub&
&&&& Toast.makeText(this, &onDown&, Toast.LENGTH_SHORT).show();&
// 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发&
// 注意和onDown()的区别,强调的是没有松开或者拖动的状态&
@Override&
public void onShowPress(MotionEvent e) {&
&&&& // TODO Auto-generated method stub&
// 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
@Override&
public boolean onSingleTapUp(MotionEvent e) {&
&&& // TODO Auto-generated method stub&
// 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发
@Override&
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,&
&&&&&&& float velocityY) {&
&&& // TODO Auto-generated method stub&
// 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发&
@Override&
public void onLongPress(MotionEvent e) {&
&&& // TODO Auto-generated method stub&
// 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个 ACTION_MOVE触发&
@Override&
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,&
&&&&&&& float distanceY) {&
&&& // TODO Auto-generated method stub&
我们来试着做一个onFling()事件的处理吧,onFling()方法中每一个参数的意义我写在注释中了,需要注意的是Fling事件的处理 代 码中,除了第一个触发Fling的ACTION_DOWN和最后一个ACTION_MOVE中包含的坐标等信息外,我们还可以根据用户在X轴或者Y轴上的 移动速度作为条件。比如下面的代码中我们就在用户移动超过100个像素,且X轴上每秒的移动速度大于200像素时才进行处理。
@Override&
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,&
&&&&&&& float velocityY) {&
&&& // 参数解释:&
&&& // e1:第1个ACTION_DOWN MotionEvent&
&&& // e2:最后一个ACTION_MOVE MotionEvent&
&&& // velocityX:X轴上的移动速度,像素/秒&
&&& // velocityY:Y轴上的移动速度,像素/秒&
&&& // 触发条件 :&
&&& // X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于 FLING_MIN_VELOCITY个像素/秒&
&&& if (e1.getX() - e2.getX() & FLING_MIN_DISTANCE&
&&&&&&&&&&& && Math.abs(velocityX) & FLING_MIN_VELOCITY) {&
&&&&&&& // Fling left&
&&&&&&& Toast.makeText(this, &Fling Left&, Toast.LENGTH_SHORT).show();&
&&& } else if (e2.getX() - e1.getX() & FLING_MIN_DISTANCE&
&&&&&&&&&&& && Math.abs(velocityX) & FLING_MIN_VELOCITY) {&
&&&&&&& // Fling right&
&&&&&&& Toast.makeText(this, &Fling Right&, Toast.LENGTH_SHORT).show();&
问题是,这个时候如果我们尝试去运行程序,你会发现我们根本得不到想要的结果,跟踪代码的执行的会发现onFling()事件一直就没有被捕捉 到。这正是一开始困扰我的问题,这到底是为什么呢?
我在讨论组的Gesture detection这个帖子里找到了答案,即我们需要在onCreate中tv.setOnTouchListener(this);之后添加如下一句代 码。
tv.setLongClickable(true);
只有这样,view才能够处理不同于Tap(轻触)的hold(即ACTION_MOVE,或者多个ACTION_DOWN),我们同样可以通过 layout定义中的android:longClickable来做到这一点。
这次遇到的这个问题和上次MapView中setOnKeyListener遇到的问题挺类似,其实都是对SDK的了解不够全面,遇到了一次记住 了就好。不过话说回来,Google在文档方面确实需要加强了,起码可以在OnGestureListener中说明需要满足那些条件才可以保证手势被正 确识别。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:86771次
排名:千里之外
转载:57篇
评论:43条
(1)(4)(4)(1)(6)(8)(4)(31)(6)鼠标手势_百度百科
鼠标手势(Mouse Gestures)最早从借鉴而来,简单地说,就是用鼠标做出一些动作以控制软件完成某些操作,就好比人们见面时打的手势一样。目前主要在浏览器和桌面窗口管理中得到比较广泛的应用,一般是按住鼠标右键,并在空白处划出某种特定的轨迹,然后即可实现预先定制功能。
鼠标手势简介
需要说明的是,一方面由于鼠标移动轨迹设计精度的限制,另一方面由于计算机对鼠标轨迹识别的准确度还有待提高,因此现在的鼠标手势还比较简单。不过,如果使用得当,你将会发现使用鼠标手势甚至比使用键盘上的快捷键还要方便。
鼠标手势分类
鼠标手势PC客户端鼠标手势
PC客户端上的鼠标手势扩展了浏览器鼠标手势的功能,使得鼠标手势的便捷性能够在PC客户端的日常使用中得得到体现。PC客户端上的鼠标手势主要通过在窗口或空白处画出不同的线条图形实现控制窗口最小化、最大化、还原、关闭等功能以及运行特定命令或应用程序。
常用的PC客户端鼠标手势软件有StrokesPlus,
, ,,鼠标手势等。
鼠标手势浏览器鼠标手势
浏览器上的鼠标手势可实现网页的前进、后退、刷新和关闭等常用操作。浏览器的鼠标手势大多具有自定义功能,可以按照自己的喜好来定义特定手势所对应的操作。而且许多时候鼠标手势更是用简单的鼠标划线实现了需要通过比较复杂的操作才能完成的命令,比如跳过缓存刷新等。
现在很多浏览器提供了对鼠标手势的支持,比较常见的如、、腾讯TT、QQ浏览器,和等。也支持,但要手动进入选项开启。目前(FireFox)本身并没有直接提供此功能,不过可以通过安装Mouse Gestures或者Firegestures等扩展程序,使得FireFox同样也能拥有鼠标手势。谷歌浏览器Google Chrome也可以通过安装Gestures for Chrome等扩展使之支持鼠标手势。iOS开发UI篇—实现一个简单的手势解锁应用(基本) - 文顶顶 - 推酷
iOS开发UI篇—实现一个简单的手势解锁应用(基本) - 文顶顶
iOS开发UI篇—实现一个简单的手势解锁应用(基本)
一、实现效果
实现效果图:
二、 手势解锁应用 分析
1.监听手指在view上的移动,首先肯定需要自定义一个view,重写touch began,touch move等方法,当手指移动到圈上时,让其变亮。可以通过button按钮来实现。
2.界面搭建
背景图片(给控制器的view添加一个imageview,设置属性背景图片)
九个按钮(把九个按钮作为一个整体,使用一个大的view来管理这些小的view,这些小的view就是9个button。如果使用手动拖控件的方式实现页面搭建,那么9个按钮需要拖拽九次,且需要对齐,不灵活,这里选择使用以【九宫格】代码的方式创建9个按钮)。
3.新建一个类,对自定义的view进行管理,这个view是从storyboard创建出来的,会调用aweakframe方法和initwithcoder方法,后者先调用因此把创建按钮的代码写在这个方法中。
部分代码:
1 //界面搭建
2 - (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self) {
[self setup];
11 -(id)initWithCoder:(NSCoder *)aDecoder
if (self=[super initWithCoder:aDecoder]) {
[self setup];
18 //在界面上创建9个按钮
19 -(void)setup
//1.创建9个按钮
for (int i=0; i&9; i++) {
UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
//2.设置按钮的状态背景
[btn setBackgroundImage:[UIImage imageNamed:@&gesture_node_normal&] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:@&gesture_node_highlighted&] forState:UIControlStateSelected];
//3.把按钮添加到视图中
addSubview:btn];
//4.禁止按钮的点击事件
btn.userInteractionEnabled=NO;
注意点: 在initwithcoder:方法中一定要先对父类进行初始化。
说明: 当视图从xib或storyboard中创建出来会调用initwithcoder:方法,如果视图是通过代码创建出来的,那么就会调用initwithFrame:方法。
提示: 使用代码创建视图,即便是调用init方法而不是直接调用nitwithFrame:方法,init方法内部也会调用nitwithFrame:方法。
建议: 如果重写view的话,建议同时重写这两个方法。调用,【self setup】
三、实现基本连线
1.创建按钮
2.设置按钮的背景图片(默认状态——选中状态)
3.添加按钮到view
提示: 不要在构造方法中设置按钮的frame,因为这个方法是在构造方法中调用的,而在构造方法中获取不了frame。
4.在layoutSubviews中设置按钮的frame。(提示:一定要先调用父类的layoutSubviews)
4.1取出对应位置的按钮
4.2设置每个按钮的frame
5.监听手指的移动。分析程序,应该监听手指的移动,而不是按钮的点击,当手指移动到按钮的范围内时,让按钮变亮。
5.1重写touchesbegan...方法
(1)获取按下的点
(2)判断触摸的位置是否在按钮的范围内(使用超级for循环)
提示: 一个判断点是否在指定范围内的方法——CGRectContainsPoint(,);
5.2重新touchesmoved...方法
说明: 当手指移动到按钮上的时候,按钮变亮,因此需要重写touchesmoved方法。
(1)获取触摸的点
(2)判断触摸的点是否在按钮的范围内。
提示: 可以把上面两个功能分别进行封装,在使用的时候直接调用即可。
封装代码:
1 //对功能点进行封装
2 -(CGPoint)getCurrentPoint:(NSSet *)touches
UITouch *touch=[touches anyObject];
CGPoint point=[touch locationInView:touch.view];
9 -(UIButton *)getCurrentBtnWithPoint:(CGPoint)point
for (UIButton *btn in self.subviews) {
if (CGRectContainsPoint(btn.frame, point)) {
(1)获取按下的点
(2)获取触摸的按钮
(3)(存储按钮)设置触摸按钮的状态
(4)通知view绘制线段
四、绘制线段
思路: 获取为选中状态的按钮,并把它们存到一个数组中,重写drawRect方法,从数组中取出所有的按钮,连接所有按钮的中点。
注意: 数组中不能存空值,在存储之前需要先进行判断。
新的问题:已经被连过的按钮,不能再连线。(在存储按钮的时候判断,如果该按钮已经被连线,那么就不再添加到数组中)。
解决代码:
if (btn && btn.selected != YES) {
//设置按钮的选中状态
btn.selected=YES;
//把按钮添加到数组中
[self.buttons addObject:btn];
(1)获取上下文
(2)取出按钮(起点和终点)
1 //重写drawrect:方法
2 -(void)drawRect:(CGRect)rect
//获取上下文
CGContextRef ctx=UIGraphicsGetCurrentContext();
//绘图(线段)
for (int i=0; i&self.buttons. i++) {
UIButton *btn=self.buttons[i];
if (0==i) {
//设置起点(注意连接的是中点)
CGContextMoveToPoint(ctx, btn.frame.origin.x, btn.frame.origin.y);
CGContextMoveToPoint(ctx, btn.center.x, btn.center.y);
CGContextAddLineToPoint(ctx, btn.frame.origin.x, btn.frame.origin.y);
CGContextAddLineToPoint(ctx, btn.center.x, btn.center.y);
//设置线条的属性
CGContextSetLineWidth(ctx, 10);
CGContextSetRGBStrokeColor(ctx, 20/255.0, 107/255.0, 153/255.0, 1);
CGContextStrokePath(ctx);
实现的完整代码
YYLockView.m
01-手势解锁(基本)
Created by apple on 14-6-18.
Copyright (c) 2014年 itcase. All rights reserved.
9 #import &YYLockView.h&
11 @interface YYLockView ()
12 @property(nonatomic,strong)NSMutableArray *
14 @implementation YYLockView
16 #pragma mark-懒加载
17 -(NSMutableArray *)buttons
if (_buttons==nil) {
_buttons=[NSMutableArray array];
25 //界面搭建
26 - (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self) {
[self setup];
35 -(id)initWithCoder:(NSCoder *)aDecoder
if (self=[super initWithCoder:aDecoder]) {
[self setup];
42 //在界面上创建9个按钮
43 -(void)setup
//1.创建9个按钮
for (int i=0; i&9; i++) {
UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
//2.设置按钮的状态背景
[btn setBackgroundImage:[UIImage imageNamed:@&gesture_node_normal&] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:@&gesture_node_highlighted&] forState:UIControlStateSelected];
//3.把按钮添加到视图中
addSubview:btn];
//4.禁止按钮的点击事件
btn.userInteractionEnabled=NO;
58 //4.设置按钮的frame
59 -(void)layoutSubviews
//4.1需要先调用父类的方法
[super layoutSubviews];
for (int i=0; i&self.subviews. i++) {
//4.2取出按钮
UIButton *btn=self.subviews[i];
//4.3九宫格法计算每个按钮的frame
CGFloat row = i/3;
CGFloat loc
CGFloat btnW=74;
CGFloat btnH=74;
CGFloat padding=(self.frame.size.width-3*btnW)/4;
CGFloat btnX=padding+(btnW+padding)*
CGFloat btnY=padding+(btnW+padding)*
btn.frame=CGRectMake(btnX, btnY, btnW, btnH);
79 //5.监听手指的移动
80 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
CGPoint starPoint=[self getCurrentPoint:touches];
UIButton *btn=[self getCurrentBtnWithPoint:starPoint];
if (btn && btn.selected != YES) {
btn.selected=YES;
[self.buttons addObject:btn];
90 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
CGPoint movePoint=[self getCurrentPoint:touches];
UIButton *btn=[self getCurrentBtnWithPoint:movePoint];
//存储按钮
//已经连过的按钮,不可再连
if (btn && btn.selected != YES) {
//设置按钮的选中状态
btn.selected=YES;
//把按钮添加到数组中
[self.buttons addObject:btn];
//通知view重新绘制
[self setNeedsDisplay];
105 //对功能点进行封装
106 -(CGPoint)getCurrentPoint:(NSSet *)touches
UITouch *touch=[touches anyObject];
CGPoint point=[touch locationInView:touch.view];
113 -(UIButton *)getCurrentBtnWithPoint:(CGPoint)point
for (UIButton *btn in self.subviews) {
if (CGRectContainsPoint(btn.frame, point)) {
123 //重写drawrect:方法
124 -(void)drawRect:(CGRect)rect
//获取上下文
CGContextRef ctx=UIGraphicsGetCurrentContext();
//绘图(线段)
for (int i=0; i&self.buttons. i++) {
UIButton *btn=self.buttons[i];
if (0==i) {
//设置起点(注意连接的是中点)
CGContextMoveToPoint(ctx, btn.frame.origin.x, btn.frame.origin.y);
CGContextMoveToPoint(ctx, btn.center.x, btn.center.y);
CGContextAddLineToPoint(ctx, btn.frame.origin.x, btn.frame.origin.y);
CGContextAddLineToPoint(ctx, btn.center.x, btn.center.y);
//设置线条的属性
CGContextSetLineWidth(ctx, 10);
CGContextSetRGBStrokeColor(ctx, 20/255.0, 107/255.0, 153/255.0, 1);
CGContextStrokePath(ctx);
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致题型:选择题  所属分类:标志题,手势题,信号灯  适应车型:A1,A2,A3,B1,B2,C1,C2,C3,C4,C5,D,E,F,M,N,P图中交通警察的手势为______信号。A、直行B、转弯C、停止D、示意车辆靠边停车标准答案:A[]  []试题分析:详见:}

我要回帖

更多关于 手势的基本要求 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信