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 动画的奇怪之处。

setAlpha()用于将视图的 alpha 设置为 0。同时您AlphaAnimation用于将 alpha 值设置为 1。这似乎可行。问题是他们在两个不同的框架上工作。 与 Honeycomb 和ObjectAnimatorssetAlpha()一起引入,而自 Cupcake 以来一直存在(可能也是 API 1,但我忘记了)。ObjectAnimators 改变了 View 的实际属性,而 AlphaAnimation 只是改变了视图的绘制方式(感到困惑吗?:P)。AlphaAnimation

无论如何,AlphaAnimation不​​会像您想象的那样影响视图的 alpha 属性。它将视图从 0 设置为 1,但属性仍然为 0,因此它仍然不可见。

您在这里有两个选择。

保持原样setAlpha()ObjectAnimators像这样使用:

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

这是最简单和首选的方法。它只适用于 API 级别 11+。如果这是需要的,那就去吧。

另一种选择是移除setAlpha()视图并将其预先设置动画,0持续时间为0. setFillAfter(true)在开始之前调用动画。这将确保它保持不可见(默认情况下可能是真的,但我不记得了)。

我希望这是有道理的。

于 2012-05-28T15:42:04.623 回答