我正在编写跟踪用户滑动的组件。
我可以创建onTouch
监听器,我正在收集所有事件。
如果我只想跟踪单一动作,它会正常工作。
我想实现“移动物体”效果。因此,如果用户触摸屏幕并在2秒内将手指向右移动20个单位,我不希望单个20个单位正确移动,但我希望此移动继续,减速。所以在接下来的2秒钟里,我想换另一个,比方说10个单位的运动。
用户附加应该能够阻止此移动,即再次触摸我的组件。
我知道,有许多“数字选择器”具有相似的行为。用户可以轻扫这样的选择器,数字开始变化,与用户滑动一样快,然后越来越慢。 这种拣货员的问题在于,我无法轻易提取这种行为,而且它们非常复杂。
我应该从哪里开始?有没有做过或者我应该自己写一切?
我唯一的想法是为这样的组件创建一些计时器。用户触摸将改变速度(开始/停止移动和改变速度),计时器将计算移动和降低速度(将经过的时间记入帐户)。
如果这是正确的解决方案,应该如何为Android应用程序创建这样的计时器?
答案 0 :(得分:1)
如果我看到你的一些代码,我可以给出更具体的答案;具体来说,是什么"移动20个单位"在代码中看起来像。这就是说你可以使用GestureDetector拦截滚动和投掷事件。
在您看来,您希望成为"可刷卡",请添加如下代码:
if (mGestureListener == null) {
mGestureListener = new SimpleOnGestureListener();
}
mGestureDetector = new GestureDetector(mContext, mGestureListener);
mTouchListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
};
this.setOnTouchListener(mTouchListener);
然后,在您的Activity中,创建一个扩展SimpleOnGestureListener
的类。在该类中,重写onFling和onScroll方法 - 再次,我无法在不看到您的代码的情况下告诉您放在那里的内容。但是这些回调会收到您创建方法所需的信息:启动手势的MotionEvent,完成手势的MotionEvent,以及x& y用于投掷的速度或x& y滚动距离。
如果您希望它移动一定距离然后减速,您可以在导致移动的任何属性上添加ValueAnimator
并为其指定DecelerateInterpolator
。
最后,在设置活动时,将视图传递给手势监听器类的新实例,并使用它在可滑动视图中设置mGestureListener。