【问题标题】:Android movement after swipe滑动后的安卓移动
【发布时间】:2014-07-04 15:55:58
【问题描述】:

我正在编写跟踪用户在其上滑动的组件。 我可以创建onTouch 监听器,我会收到所有事件。 如果我只想跟踪单个动作,它会工作得很好。

我想实现“移动物体”的效果。因此,如果用户触摸屏幕并在 2 秒内将手指向右移动 20 个单位,我不想获得单个 20 个单位的正确移动,但我希望这个移动继续,放慢速度。因此,在接下来的 2 秒内,我想获得另一个,比如说,10 个单位的移动。

其他用户应该能够停止这种移动,即再次触摸我的组件。

我知道,有很多“数字选择器”有类似的行为。用户可以在这样的选择器中滑动,数字开始随着用户滑动的速度变化,然后越来越慢。 这种选择器的问题是我不能轻易地提取这种行为,而且它们非常复杂。

我应该从哪里开始?有什么事情要我自己写吗?

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

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

【问题讨论】:

    标签: android touch


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 2011-12-29
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多