0

最初に、私がやろうとしていることと私が試したことについて、いくつかのコンテキストを説明しましょう :) 常に右から左に移動する必要がある最大 10 個のビューがあります。1 つのビューが画面を離れると、別のビューが右側から表示されます。すべてのビューはタッチ可能である必要があります。いくつかの方法でこれを達成できましたが、スムーズではありませんでした (途切れたものもあれば、アプリの速度が低下したときにジャンプしたように見えるものもありました)。これらのビューはすべて 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 に答える