【问题标题】:Having touchevents work on 2.3 using ObjectAnimator使用 ObjectAnimator 让 touchevents 在 2.3 上工作
【发布时间】:2012-08-20 03:33:59
【问题描述】:

所以首先让我给你一些关于我正在尝试做的事情和我尝试过的事情的背景:) 我有多达十个视图,我需要不断地从右向左移动。一旦一个视图离开屏幕,另一个视图就会从右侧进入。所有的视图都需要是可触摸的。我能够通过几种方式实现这一点,但它们并不顺利(有些结结巴巴,有些在应用程序变慢时似乎跳了起来)。所有这些视图都在一个 viewGroup 中,我正在重用它们(只有 10 个视图)。

这些是我尝试过的方法:

  1. 更改视图的边距(使用处理程序更新)
  2. 调用 View.layout(l,t,r,b)(使用处理程序更新)
  3. 获取 View.getDrawingCache() 并将其绘制在 surfaceView 上(也使用处理程序)
  4. 使用 ObjectAnimator (nineoldandroids)

它们都不是很流畅(视图会停止几分之一秒并跳转),但最好的是使用动画。我首先使用了来自 android 的常规 translateAnimation,但当然这是不可触摸的。我尝试获取动画的矩阵(我不知道是否做错了什么)但它没有返回视图的顶部/左侧:

Transformation outTransformation = new Transformation();
      getTransformation(System.currentTimeMillis(), outTransformation);
      Matrix transformationMatrix = outTransformation.getMatrix();
      float[] matrixValues = new float[9];
      transformationMatrix.getValues(matrixValues);
      float transX = matrixValues[2];
      float transY = matrixValues[5];

所以现在我的问题。

我得到的最好结果是使用 ObjectAnimator。

mAnimation[index] = ObjectAnimator.ofFloat(mViews[index], "translationX", -left);
            mAnimation[index].setDuration(time);
            mAnimation[index].setInterpolator(new LinearInterpolator());
            mAnimation[index].addListener(mAnimatorListener);
            mAnimation[index].start();

我可以使用 ObjectAnimator 进行触摸,但只能使用 android 3.0 及更高版本(不是 2.3)。

有谁知道我为什么或如何让触摸在 android 2.3 上工作? 还是有更好的方法来移动所有这些视图? 在移动/动画这么多视图时,我应该记住或做哪些事情?

您知道如何提高使用上述任何其他选项的“流畅性”(口吃或停止几分之一秒,然后跳起来赶上)吗?

ViewGroup 是不是最好用?抱歉问了这么多问题。

任何想法、想法或 cmets 都会非常有帮助,非常感谢 :) 如果您有更多问题或不明白的地方,请告诉我。

【问题讨论】:

    标签: android views translate-animation objectanimator


    【解决方案1】:

    我刚刚发现了你的问题,因为我遇到了同样的问题。我有一个充满按钮的布局,我使用来自NineOldAndroids 的 ObjectAnimator 来移动它。如果 API >= 11,那么一切正常,所有按钮都可以点击到它们的新位置。但是,如果 API this 答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 2014-02-15
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多