博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android -- VelocityTracker
阅读量:7206 次
发布时间:2019-06-29

本文共 2986 字,大约阅读时间需要 9 分钟。

VelocityTracker                                                                      

主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出当前的速度。

方法                                                                                   

//获取一个VelocityTracker对象, 用完后记得回收  //回收后代表你不需要使用了,系统将此对象在此分配到其他请求者  static public VelocityTracker obtain();  public void recycle();   //计算当前速度, 其中units是单位表示, 1代表px/毫秒, 1000代表px/秒, ..  //maxVelocity此次计算速度你想要的最大值  public void computeCurrentVelocity(int units, float maxVelocity);  //经过一次computeCurrentVelocity后你就可以用一下几个方法获取此次计算的值  //id是touch event触摸点的ID, 来为多点触控标识,有这个标识在计算时可以忽略  //其他触点干扰,当然干扰肯定是有的  public float getXVelocity();  public float getYVelocity();  public float getXVelocity(int id);  public float getYVelocity(int id);

Code                                                                                   

public class VelocityTrackerTest extends Activity {      private TextView mInfo;      private VelocityTracker mVelocityTracker;      private int mMaxVelocity;      private int mPointerId;        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);            mInfo = new TextView(this);          mInfo.setLines(4);          mInfo.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));          mInfo.setTextColor(Color.WHITE);            setContentView(mInfo);            mMaxVelocity = ViewConfiguration.get(this).getMaximumFlingVelocity();      }        @Override      public boolean onTouchEvent(MotionEvent event) {           if(null == mVelocityTracker) {              mVelocityTracker = VelocityTracker.obtain();          }          mVelocityTracker.addMovement(event);          final VelocityTracker verTracker = mVelocityTracker;          switch (event.getAction()) {              case MotionEvent.ACTION_DOWN:                  //求第一个触点的id, 此时可能有多个触点,但至少一个                  mPointerId = event.getPointerId(0);                  break;                case MotionEvent.ACTION_MOVE:                  //求伪瞬时速度                  verTracker.computeCurrentVelocity(1000, mMaxVelocity);                  float velocityX = verTracker.getXVelocity(mPointerId);                  float velocityY = verTracker.getYVelocity(mPointerId);                  recodeInfo(velocityX, velocityY);                  break;                case MotionEvent.ACTION_UP:              case MotionEvent.ACTION_CANCEL:                    if(null != mVelocityTracker) {                mVelocityTracker.clear();                mVelocityTracker.recycle();                mVelocityTracker = null;                    }                   break;                default:                  break;          }          return super.onTouchEvent(event);      }          private static final String sFormatStr = "velocityX=%f\nvelocityY=%f";        /**       * 记录当前速度       *       * @param velocityX x轴速度       * @param velocityY y轴速度       */      private void recodeInfo(final float velocityX, final float velocityY) {          final String info = String.format(sFormatStr, velocityX, velocityY);          mInfo.setText(info);      }  }

我是天王盖地虎的分割线                                                             

 

 

本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/4082579.html,如需转载请自行联系原作者

你可能感兴趣的文章
《Python CookBook2》 第四章 Python技巧 - 若列表中某元素存在则返回之 && 在无须共享引用的条件下创建列表的列表...
查看>>
redhat网卡设置
查看>>
javascript 的作用域
查看>>
JFinal极速开发框架使用笔记(二) 两个问题,一个发现
查看>>
AutoCompleteTextView
查看>>
SecureCRT生成序列
查看>>
Android 应用程序主框架搭建
查看>>
2012腾讯春季实习生面试经历(二)
查看>>
用Bootstrap框架弹出iframe页面 在弹出的模态框中载人iframe页面,bootstrapiframe
查看>>
2012腾讯暑期实习面经(技术类web前端)
查看>>
第3种方法获取redis cluster主从关系
查看>>
注册表管理(本地、远程)
查看>>
《Linux内核设计与实现》第四周读书笔记——第五章
查看>>
关于COM组件log的位置
查看>>
C++操作符重载
查看>>
postgresql 时间戳格式为5分钟、15分钟
查看>>
linq中如何在join中指定多个条件
查看>>
交换排序
查看>>
【转】链表归并排序插入排序
查看>>
EL表达式和JSTL的使用
查看>>