使用ObjectAnimator让touchevents在2.3上工作

时间:2012-08-24 14:42:45

标签: android views translate-animation objectanimator

所以首先让我给你一些关于我正在尝试做什么以及我尝试过的内容的背景信息:) 我有多达十个视图,我需要不断地从右向左移动。一旦一个视图离开屏幕,另一个视图从右侧进入。所有观点都需要可以触摸。我能够通过几种方式实现这一目标,但它们并不顺畅(有些结果,其他人似乎在应用程序放慢时跳转)。所有这些视图都在viewGroup中,我正在重用它们(只有10个视图)。

这些是我尝试的方式:

  1. 更改视图的边距(使用处理程序更新)
  2. 调用View.layout(l,t,r,b)(使用处理程序更新)
  3. 获取View.getDrawingCache()并在surfaceView上绘图(也使用处理程序)
  4. 使用ObjectAnimator(nineoldandroids)
  5. 它们都没有工作得非常流畅(视图会在几分之一秒内停止并跳转)但最好的是使用动画。我第一次使用来自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最好用吗?很抱歉这么多问题。

    任何想法,想法或评论都将非常有用,非常感谢:) 如果您有更多问题或不明白,请告诉我。

1 个答案:

答案 0 :(得分:0)

我刚发现你的问题,因为我遇到了同样的问题。我有一个充满按钮的布局,我使用NineOldAndroids中的ObjectAnimator来移动它。如果API>> 11,那么一切正常,并且所有按钮都可以点击到其新位置。但是,如果API< 11然后,虽然布局移动,但按钮在新位置不可点击,而是在旧位置。另请查看this answer。