多点触碰3

本文详细介绍了Android中的VelocityTracker类,该类用于获取触摸事件的速度。包括如何初始化和使用VelocityTracker,如何通过computeCurrentVelocity()方法计算触摸点的速度,并展示了处理单点或多点触摸速度的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在进入手势操作前,先来看看一些处理触摸时遗漏了的要点--VelocityTracker顾名思义,VelocityTracker就是速度跟踪的意思。我们可以获得触摸点的坐标,根据按下的时间可以简单的计算出速度的大小。但是这样会令我们的代码混乱。Android直接提供了一种方式来方便我们获得触摸的速度。

  1. publicclassVelocityTrackerActivityActivityextendsActivity{
  2. /**Calledwhentheactivityisfirstcreated.*/
  3. TextViewtextView;
  4. privateVelocityTrackervTracker=null;
  5. @Override
  6. publicvoidonCreate(BundlesavedInstanceState){
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.main);
  9. textView=(TextView)findViewById(R.id.textView);
  10. }
  11. @Override
  12. publicbooleanonTouchEvent(MotionEventevent){
  13. intaction=event.getAction();
  14. switch(action){
  15. caseMotionEvent.ACTION_DOWN:
  16. if(vTracker==null){
  17. vTracker=VelocityTracker.obtain();
  18. }else{
  19. vTracker.clear();
  20. }
  21. vTracker.addMovement(event);
  22. break;
  23. caseMotionEvent.ACTION_MOVE:
  24. vTracker.addMovement(event);
  25. vTracker.computeCurrentVelocity(1000);
  26. textView.setText("thexvelocityis"+vTracker.getXVelocity());
  27. textView.append("theyvelocityis"+vTracker.getYVelocity());
  28. break;
  29. caseMotionEvent.ACTION_UP:
  30. caseMotionEvent.ACTION_CANCEL:
  31. vTracker.recycle();
  32. break;
  33. }
  34. event.recycle();
  35. returntrue;
  36. }
  37. }

public class VelocityTrackerActivityActivity extends Activity { /** Called when the activity is first created. */ TextView textView; private VelocityTracker vTracker = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textView = (TextView)findViewById(R.id.textView); } @Override public boolean onTouchEvent(MotionEvent event){ int action = event.getAction(); switch(action){ case MotionEvent.ACTION_DOWN: if(vTracker == null){ vTracker = VelocityTracker.obtain(); }else{ vTracker.clear(); } vTracker.addMovement(event); break; case MotionEvent.ACTION_MOVE: vTracker.addMovement(event); vTracker.computeCurrentVelocity(1000); textView.setText("the x velocity is "+vTracker.getXVelocity()); textView.append("the y velocity is "+vTracker.getYVelocity()); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: vTracker.recycle(); break; } event.recycle(); return true; } }VelocityTracker不仅可以处理单点的速度,也可以获得多点的速度。这和处理多点触摸的方式是一样的,传入一个ID就可以了。VelocityTracker获得的速度是有正负之分,computerCurrentVelocity()可以设置单位。1000 表示每秒多少像素(pix/second),1代表每微秒多少像素(pix/millisecond)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值