0

所以首先让我给你一些关于我正在尝试做的事情和我尝试过的事情的背景信息:) 我有多达十个视图,我需要不断地从右到左移动。一旦一个视图离开屏幕,另一个视图就会从右侧进入。所有的视图都需要是可触摸的。我能够通过几种方式实现这一点,但它们并不顺利(有些结结巴巴,有些在应用程序变慢时似乎跳了起来)。所有这些视图都在一个 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 是最好用的吗?抱歉问了这么多问题。

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

4

1 回答 1

0

我刚找到你的问题,因为我遇到了同样的问题。我有一个充满按钮的布局,我使用 NineOldAndroids 的ObjectAnimator来移动它。如果 API >= 11,那么一切正常,所有按钮都可以点击到它们的新位置。但是,如果 API < 11,那么虽然布局移动了,但按钮在其新位置不可点击,而是在其旧位置可点击。还要检查这个答案。

于 2013-06-20T18:40:08.620 回答