注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

过☆客

一颗迷茫的心在3D世界中飘荡...

 
 
 

日志

 
 
关于我

爱宁静,不爱喧闹, 爱奋斗,也爱自由, 爱顺其自然,爱独来独往, 没高学历,不算成功, 没车也没房,但我真诚, 走进你的世界,却不留痕迹, 我是过客,不只是过客...

网易考拉推荐

Android 多点触控实  

2015-01-17 17:14:31|  分类: 日积月累-android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    Android中的多点触控其实也并不复杂,网上也有很多的代码。
    要注意的一点是在Activity中的 public boolean onTouchEvent(final MotionEvent event) 这个方式中处理。如果返回的是false,只有一个触摸点被传送,返回true的时候,系统在得到true指令后,获得触摸点的监听器并没有被置失效,多点触控就得以实现了。

import android.view.MotionEvent;


@Override
public boolean onTouchEvent(final MotionEvent event)
{
// these data are used in ACTION_MOVE and ACTION_CANCEL
final int pointerNumber = event.getPointerCount();
final int[] ids = new int[pointerNumber];
final float[] xs = new float[pointerNumber];
final float[] ys = new float[pointerNumber];

for (int i = 0; i < pointerNumber; i++)
{
ids[i] = event.getPointerId(i);
xs[i] = event.getX(i);
ys[i] = event.getY(i);
}

switch (event.getAction() & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_POINTER_DOWN:
final int indexPointerDown = event.getAction() >> MotionEvent.ACTION_POINTER_ID_SHIFT;
final int idPointerDown = event.getPointerId(indexPointerDown);
final float xPointerDown = event.getX(indexPointerDown);
final float yPointerDown = event.getY(indexPointerDown);

queueEvent(new Runnable()
{
@Override
public void run()
{
my.touchdown(xPointerDown, yPointerDown, idPointerDown);
}
});
break;

case MotionEvent.ACTION_DOWN:
// there are only one finger on the screen
final int idDown = event.getPointerId(0);
final float xDown = xs[0];
final float yDown = ys[0];

queueEvent(new Runnable()
{
@Override
public void run()
{
my.touchdown(xDown, yDown, idDown);
}
});
break;

case MotionEvent.ACTION_MOVE:
queueEvent(new Runnable()
{
@Override
public void run()
{
for (int i = 0; i < pointerNumber; i++)
my.touchmove(xs[i], ys[i], ids[i]);
}
});
break;

case MotionEvent.ACTION_POINTER_UP:
final int indexPointUp = event.getAction() >> MotionEvent.ACTION_POINTER_ID_SHIFT;
final int idPointerUp = event.getPointerId(indexPointUp);
final float xPointerUp = event.getX(indexPointUp);
final float yPointerUp = event.getY(indexPointUp);

queueEvent(new Runnable()
{
@Override
public void run()
{
my.touchup(xPointerUp, yPointerUp, idPointerUp);
}
});
break;

case MotionEvent.ACTION_UP:
// there are only one finger on the screen
final int idUp = event.getPointerId(0);
final float xUp = xs[0];
final float yUp = ys[0];

queueEvent(new Runnable()
{
@Override
public void run()
{
my.touchup(xUp, yUp, idUp);
}
});
break;

case MotionEvent.ACTION_CANCEL:
queueEvent(new Runnable()
{
@Override
public void run()
{
my.touchcancle(xs[0], ys[0], ids[0]);
}
});
break;
}
return true;
}

上面代码中定义了三个自定义事件处理方法
    my.touchdown(float x, float y, int touchId) // 点击
    my.touchmove(float x, float y, int touchId) // 移动
    my.touchup(float x, float y, int touchId)   // 松开
所用的到触摸事件的逻辑处理可以在这三个方法中进行。x,y为触摸的屏幕点的位置,touchId为屏幕触摸点的一个id,用来区分触摸的点,如果touchId相同则是同一个触点的事件。
  评论这张
 
阅读(352)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017