[Android] Android 4.1 ViewPropertyAnimator の変更点

| トラックバック(0) |

Android 4.1 (API Level 16)の ViewPropertyAnimator の変更点を調べました。

 

変更点

以下の3メソッドが追加されています。

  • withLayer()
  • withStartAction(Runnable)
  • withEndAction(Runnable)

 

解説

  • withLayer()

ViewPropertyAnimator を使用してアニメーションを実行する時、

アニメーション対象の View をハードウェアレイヤを使用してアニメーションさせます。

アニメーション終了後は、この設定はクリアされます。

ただし、ハードウェアアクセラレータが使用できない環境では、ソフトウェアレイヤが使用されます。

レイヤーの合成処理をハードウェアに任せることで高速化が期待できます。

 

  • withStartAction(Runnable) / withEndAction(Runnable)

ViewPropertyAnimator を使用したアニメーションの開始/終了時に実行したい処理を設定できます。

 

追加されたメソッドについて、実際に呼び出してみました。

以下のコードを実行すると、アニメーション開始時(3秒後)に、withStartAction() で指定した処理、

アニメーション終了時に、withEndAction() で指定した処理が呼び出されます。

また、withLayer() を呼び出しているので、ビュー(ここではボタン)のアニメーションは、ハードウェアレイヤ上で処理されます。

 

サンプルソースコード

final Button button = (Button) findViewById(R.id.button);
// 指定した View から ViewPropertyAnimator インスタンスを取得する
ViewPropertyAnimator vpa = button.animate();
// ハードウェアアクセラレータが使用できる環境では、ハードウェアレイヤを使用するように設定
vpa.withLayer();
// アニメーション継続期間を設定する(ミリ秒)
vpa.setDuration(3000);
// アニメーション開始時に実行する処理を設定する
vpa.withStartAction(new Runnable() {
    @Override
    public void run() {
        // アニメーション開始時に呼び出されます。
        // アニメーション開始遅延時間が設定されている場合は、
        // アニメーション開始遅延時間後に呼び出されます。
        String layerTypeString = "";
        int layerType = button.getLayerType();
        switch (layerType) {
            case View.LAYER_TYPE_NONE:
                // withLayer() を呼び出さなかった時
                layerTypeString = "LAYER_TYPE_NONE";
                break;
            case View.LAYER_TYPE_SOFTWARE:
                // withLayer() を呼出した時、
                // ハードウェアアクセラレータが使用できない環境では、ソフトウェアレイヤを使用される
                layerTypeString = "LAYER_TYPE_SOFTWARE";
                break;
            case View.LAYER_TYPE_HARDWARE:
                // withLayer() を呼出した時、
                // ハードウェアアクセラレータが使用できる環境では、ハードウェアレイヤを使用される
                layerTypeString = "LAYER_TYPE_HARDWARE";
                break;
        }
        Log.v("ViewPropertyAnimatorSample",
                "withStartAction() using " + layerTypeString);
    }
});
// アニメーション終了時に実行する処理を設定する
vpa.withEndAction(new Runnable() {
    @Override
    public void run() {
        // アニメーション修了時に呼び出されます。
        Log.v("ViewPropertyAnimatorSample", "withEndAction()");
        button.setVisibility(View.GONE);
    }
});
// ビューに対してアニメーションを設定する(-> アニメーションが開始されます)
vpa.rotation(90);

 

トラックバック(0)

トラックバックURL: http://mt.adakoda.com/mt-tb.cgi/586

2016年8月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31