1

次のコードを使用して、ImageViewのAlphaAnimationを開始しようとしました。

        ImageView view;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.prueba);

            view=(ImageView)findViewById(R.id.icon);
            view.setAlpha(0x00);        
            view.setVisibility(View.VISIBLE);
            view.setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent e) {
                    switch (e.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        Log.i("Down v", "x:" + e.getX() + " y:" + e.getY());
                        view.startAnimation(new AlphaAnimation(0x22, 0xFF));
    //                  break;
                    case MotionEvent.ACTION_MOVE:
                        Log.i("Move", "x:" + e.getX() + " y:" + e.getY());
                        break;
                    case MotionEvent.ACTION_UP:
                        Log.i("Up", "x:" + e.getX() + " y:" + e.getY());
                        view.setAlpha(0x00);
                        break;
                    case MotionEvent.ACTION_OUTSIDE:
                        Log.i("Out", "x:" + e.getX() + " y:" + e.getY());
                        break;
                    default:
                        Log.i("None", "nada");
                    }
                    return false;
                }
            });
            view.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.i("Click", "es un click");
                }
            });
        }

このコードは、タッチされたときにImageViewが表示されるようにする必要がありますが、何も起こりませんでした。解決策はありますか?

4

1 に答える 1

0

これは、Android アニメーションの奇妙な点です。

ビューのアルファを 0 に設定するために使用していますsetAlpha()。同時にAlphaAnimation、アルファ値を 1 に設定するために使用しています。これは機能するようです。問題は、それらが 2 つの異なるフレームワークで動作することです。 は、Cupcake (おそらく API 1 もそうですが、忘れてしまいました) 以来存在していましたが、 ObjectAnimatorssetAlpha()と組み合わせて Honeycomb で導入されました。ObjectAnimators は View の実際のプロパティを変更しますが、AlphaAnimation はビューの描画方法を変更するだけです (まだ混乱していますか? :P)。AlphaAnimation

とにかく、AlphaAnimationあなたが思っているように、ビューのアルファプロパティには影響しません。ビューを 0 から 1 にアニメーション化していますが、プロパティはまだ 0 であるため、まだ見えません。

ここには 2 つのオプションがあります。

そのままにして、次のようsetAlpha()に使用します。ObjectAnimators

ObjectAnimator anim = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f);
anim.setDuration(1000);
anim.start();

これが最も簡単で好ましい方法です。ただし、API レベル 11 以降でのみ機能します。それが望ましい場合は、それを選択してください。

もう 1 つのオプションは、ビューを削除して、期間を にsetAlpha()事前にアニメーション化することです。アニメーションを開始する前に呼び出します。これにより、非表示のままになります(デフォルトではそうかもしれませんが、覚えていません)。00setFillAfter(true)

それが理にかなっていることを願っています。

于 2012-05-28T15:42:04.623 に答える