surface pro 4手势有没有手势识别

本帖子已过去太久远了,不再提供回复功能。触摸屏手势识别--利用触摸屏手势实现一个简单切换图效果
MySurfaceViewAnimation.java
java.util.V
import android.content.C
import android.graphics.B
android.graphics.BitmapF
import android.graphics.C
import android.graphics.C
import android.graphics.P
import android.util.L
android.view.GestureD
import android.view.MotionE
import android.view.SurfaceH
import android.view.SurfaceV
import android.view.V
android.view.GestureDetector.OnGestureL
android.view.SurfaceHolder.C
android.view.View.OnTouchL
public class MySurfaceViewAnimation extends
SurfaceView implements Callback,
Runnable, OnGestureListener, OnTouchListener
// SurfaceView提供一个专用的绘图表面
// Callback
如果你想创建一个动画绘制延伸绘制,实现此接口。
// 一个可以执行的命令
// 监听器,用于通知发生时的手势
// 要调用一个回调的接口定义,当触摸事件被分派到这个观点。
// 定义一个线程
private Thread th = new
Thread(this);
// 显示器表面的抽象接口
private SurfaceH
// 检测各种手势和使用提供MotionEvent小号的事件。
private GestureD
private int bmp_x, bmp_y;
private boolean isChageP
// 只装String类型数据的容器
Vector&String& v_//
// 构造函数
public MySurfaceViewAnimation(Context
context) {
// 继承父类的构造方法
super(context);
// 实例化容器
v_str = new
Vector&String&();
// 永不锁屏
this.setKeepScreenOn(true);
// 实例化位图
BitmapFactory.decodeResource(getResources(),
R.drawable.a);
// 获得surfaceHolder对象
sfh = this.getHolder();
// 回调SurfaceHolder
sfh.addCallback(this);
// 实例化画笔
paint = new Paint();
// 防止边缘的锯齿
paint.setAntiAlias(true);
若不加setLongClickable(true)的话OnFling会失效
this.setLongClickable(true);
// setLongClickable( true )是必须的,因为
只有这样,
我们当前的SurfaceView(view)才能够处理不同于触屏形式;
// 例如:ACTION_MOVE,或者多个ACTION_DOWN
this.setOnTouchListener(this);//
将本类绑定触屏监听器
gd = new GestureDetector(this);
gd.setIsLongpressEnabled(true);
public void surfaceCreated(SurfaceHolder
当系统调用了此方法才创建了view所以在这里才能取到view的宽高!!有些童鞋总是把东西都放在初始化函数里!
线程最好放在这里来启动,因为放在初始化里的画,那view还没有呢,到了提交画布unlockCanvasAndPost的时候就异常啦!
bmp_x = (getWidth() - bmp.getWidth())
bmp_y = (getHeight() - bmp.getHeight())
th.start();
public void draw() {
canvas = sfh.lockCanvas();
if (canvas != null) {
canvas.drawColor(Color.WHITE);//
canvas.drawBitmap(bmp, bmp_x, bmp_y,
paint.setTextSize(20);// 设置文字大小
paint.setColor(Color.WHITE);
// 这里画出一个矩形方便童鞋们看到手势操作调用的函数都是哪些
canvas.drawRect(50, 30, 175, 120,
paint.setColor(Color.RED);//
设置文字颜色
if (v_str != null) {
for (int i = 0; i &
v_str.size(); i++) {
canvas.drawText(v_str.elementAt(i), 50, 50 +
} catch (Exception e) {
Log.v("Himi", "draw is Error!");
} finally {
sfh.unlockCanvasAndPost(canvas);
public void run() {
// TODO Auto-generated method stub
while (true) {
Thread.sleep(100);
} catch (Exception ex) {
public void surfaceChanged(SurfaceHolder
holder, int format, int width,
int height) {
public void surfaceDestroyed(SurfaceHolder
// @Override
// public boolean onTouchEvent(MotionEvent
event) {// 备注2
public boolean onTouch(View v, MotionEvent
event) {// 备注3
if (v_str != null)
v_str.removeAllElements();
return gd.onTouchEvent(event);//
--------------以下是使用OnGestureListener手势监听的时候重写的函数---------
public boolean onDown(MotionEvent e)
// ACTION_DOWN
v_str.add("onDown");
// ACTION_DOWN 、短按不移动
public void onShowPress(MotionEvent e)
v_str.add("onShowPress");
// ACTION_DOWN 、长按不滑动
public void onLongPress(MotionEvent e)
v_str.add("onLongPress");
// ACTION_DOWN 、慢滑动
public boolean onScroll(MotionEvent e1,
MotionEvent e2, float distanceX,
float distanceY) {
v_str.add("onScroll");
// ACTION_DOWN 、快滑动、 ACTION_UP
public boolean onFling(MotionEvent e1,
MotionEvent e2, float velocityX,
float velocityY) {
v_str.add("onFling");
// -------备注5----------
if(e1.getAction()==MotionEvent.ACTION_MOVE){
// v_str.add("onFling");
if(e1.getAction()==MotionEvent.ACTION_DOWN){
// v_str.add("onFling");
if(e1.getAction()==MotionEvent.ACTION_UP){
// v_str.add("onFling");
if(e2.getAction()==MotionEvent.ACTION_MOVE){
// v_str.add("onFling");
if(e2.getAction()==MotionEvent.ACTION_DOWN){
// v_str.add("onFling");
if(e2.getAction()==MotionEvent.ACTION_UP){
// v_str.add("onFling");
if (isChagePage)
BitmapFactory.decodeResource(getResources(),
R.drawable.a);
BitmapFactory.decodeResource(getResources(),
R.drawable.b);
isChagePage = !isChageP
// 短按ACTION_DOWN、ACTION_UP
public boolean onSingleTapUp(MotionEvent e)
v_str.add("onSingleTapUp");
MainActivity.java
android.app.A
import android.os.B
import android.view.W
android.view.WindowM
public class MainActivity extends
Activity {
public void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);&
setContentView(new
MySurfaceViewAnimation(this));
补充一下:代码初始化手势的时候有这么一句:gd.setIsLongpressEnabled(true);这个函数标识,如果你设置true的话就是开启了长按键,当你长时间触屏不动就能得到&onLongPress
手势,如果设置false 那么你长时间触屏不移动也得不到这个手势的支持~此函数不设置也默认设置为true
&&&这里我只是给一些不太熟悉这种定义Vector方式的童鞋简单介绍一下:我们一般定义容器的时候都是直接
Vector vc =new
Vector();嗯,没错,但是这种Vector&String&的定义是种泛型定义,那么简单的说下区别,如果Vector
vc =new Vector();这种方式装入Object的以后,取的时候是不是要把取出的进行强转一下类型?!
呵呵,而Vector&String&这种定义的时候就表明了这个容器我只装String类型的元素,so~取出的时候也不用再去强转了。
:通过测试发现,这里仍然响应触屏时间,即使你把触屏焦点设置成setFocusableInTouchMode(false)也会调用!!!原因是因为我们本类的view绑定了触屏事件监听器,那么肯定会先响应备注3,然后我们备注4这里没有
true而是直接返给了手势监听器去监听,让监听器找合适的函数来处理用户的手势,也就是说没有标志处理完成,所以我们的重写的onTouchEvent()也会继续去处理!
这里注释的代码我是在测试两个动作到底是哪两个,因为网上介绍Android手势帖子都疯传说:
第一个是MotionEvent.ACTION_DOWN
第二个是MotionEvent.ACTION_MOVE!那么第一个动作是按下好理解是玩家刚触屏的动作,第二个是move!难道是移动的点都记录下来了??
其实测试结果发现:
第一个是MotionEvent.ACTION_DOWN
第二个是MotionEvent.ACTION_UP!
唉~现在网上的帖子真是各种抄袭~就不能测试下??郁闷!&既然这两个动作一个是按下一个是抬起那就很明确其意义了,我们可以根据
这两个动作知道用户到底滑动的距离等等了,其距离e2.getX()-e1.getX();
1.触屏后、一直触屏不动、演变顺序:onDown-&onShowPress-&onLongPress;
2.触屏后、一直触屏慢移动是onScroll/快移动是onFling
、手指离开屏幕;
:触屏后、一直触屏移动,如果手指不离开屏幕一直都是onScroll,不管你移动的速度多快,永远不会是onFling!
Ok,手势虽然挺简单的,但是如果熟练来使用并且加入游戏中肯定让你的Game增色不少~
转载自&原文链接:&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。多点触控手势识别算法的研究_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
多点触控手势识别算法的研究
龙源创新数字传媒(北京)股份有限公司|
总评分0.0|
试读已结束,如果需要继续阅读或下载,敬请购买
定制HR最喜欢的简历
你可能喜欢
您可以上传图片描述问题
联系电话:
请填写真实有效的信息,以便工作人员联系您,我们为您严格保密。热门搜索:
您的位置:
微软未来Surface的3D相机系统?竟能用手势输入
原标题:微软未来Surface的3D相机系统?竟能用手势输入  根据 Patently Apple 今日消息,美国专利商标局发布了一项微软的专利申请,该专利涉及到了微软 Surface 设备的 3D 深度摄像系统,通过凌空解读手势来控制设备的一些功能,另外 3D 深度照相机还可以捕捉来自手写笔的输入,以便通过把其他平面上的绘制内容可以输入到 Surface 设备之中。  传闻中苹果 iPhone 8 将包括一个先进的 3D 深度相机用于面部识别,不过苹果以往有专利显示,该公司同样可以在 3D 深度相机中加入凌空手势输入的功能。此外苹果公司的 3D 传感器供应商在以下的视频中已经展示了凌空手势识别功能,或许这项功能在 iPhone 8 上实现还算太早,但它在某一代 iPhone 中出现也不是没有可能。   微软的发明涉及到用户与元素的交互。用户使用任何物品(例如手指,笔等)通过相机功能在设备面前进行书写或绘制时,就会在 surface 设备中显示同样的绘制内容。同时相机可以感测对象的 3D 位置和用户手势,用来操控便携设备的界面内容。而这个效果与上面苹果的 3D 操控视频类似。   微软在去年第一季度向美国专利局提交的专利申请,而这项专利将有很大的可能会变成现实。
声明: 91.com所发布的内容均来源于互联网,目的在于传递信息,但不代表本站赞同其观点及立场,版权归属原作者,如有侵权,请联系删除。
信息也是生产力,精简才是硬道理!情报猎手带你突破信息迷雾,每日独家为您锁定最有价值的IT行业新鲜事。打开微信,扫描关注,赢取每月粉丝奖!
苹果发布会iPhone X
小米MIX2小米发布会
三星Note8三星发布会
魅族Pro 7魅族发布会
微博和微信:91门户微软正研发Surface Pro手势和眼球操作配件
近日,一份新专利显示,微软正在为自家的Surface Pro设备研发新型的眼球追踪器配件,另外还集成了手势、深度操作。
微软的这款配件能利用Surface键盘链接器进行充电和数据传输,同时也能够以安全磁吸方式进行连接键盘和Surface设备。反过来,该配件上也有连接Surface键盘的插槽,因此不会干扰设备的正常功能。
相机能够调节一定的角度,用于监测手指和手的姿势,它们将指向键盘上方的区域,但也可能包括视野足够的视线跟踪和面部识别。
目前尚不清楚微软是否会真正推出这款Surface键盘配件,但联系到微软在眼球追踪和手势方面的研发,相信推出该配件只是迟早的事情。
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点}

我要回帖

更多关于 surface触摸板手势 的文章

更多推荐

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

点击添加站长微信