滑动后的Android动作

时间:2014-07-04 15:55:59

标签: android touch

我正在编写跟踪用户滑动的组件。 我可以创建onTouch监听器,我正在收集所有事件。 如果我只想跟踪单一动作,它会正常工作。

我想实现“移动物体”效果。因此,如果用户触摸屏幕并在2秒内将手指向右移动20个单位,我不希望单个20个单位正确移动,但我希望此移动继续,减速。所以在接下来的2秒钟里,我想换另一个,比方说10个单位的运动。

用户附加应该能够阻止此移动,即再次触摸我的组件。

我知道,有许多“数字选择器”具有相似的行为。用户可以轻扫这样的选择器,数字开始变化,与用户滑动一样快,然后越来越慢。 这种拣货员的问题在于,我无法轻易提取这种行为,而且它们非常复杂。

我应该从哪里开始?有没有做过或者我应该自己写一切?

我唯一的想法是为这样的组件创建一些计时器。用户触摸将改变速度(开始/停止移动和改变速度),计时器将计算移动和降低速度(将经过的时间记入帐户)。

如果这是正确的解决方案,应该如何为Android应用程序创建这样的计时器?

1 个答案:

答案 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。