在Android中的Drawable上应用动画

时间:2010-05-25 05:26:32

标签: android animation drawable

我正在为徽标添加发光动画效果。到目前为止,我已经设法使用LayeredDrawable获取徽标背后的发光图像,但我无法弄清楚如何为它制作动画。我发现AlphaAnimation会达到预期的效果,但不幸的是我只能将它应用于Views,而不是Drawables。我怎样才能达到这个效果?

4 个答案:

答案 0 :(得分:6)

简单示例

final ImageView imageView = (ImageView) findViewById(R.id.animatedImage);
final Button animated = (Button) findViewById(R.id.animated);
animated.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Drawable drawable = imageView.getDrawable();
        if (drawable.getAlpha() == 0) {
            ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(drawable, PropertyValuesHolder.ofInt("alpha", 255));
            animator.setTarget(drawable);
            animator.setDuration(2000);
            animator.start();
        } else {
            ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(drawable, PropertyValuesHolder.ofInt("alpha", 0));
            animator.setTarget(drawable);
            animator.setDuration(2000);
            animator.start();
        }
    }
});

方法getAlpha()添加api 19.但这不是一个很大的限制,你可以将状态保存在局部变量中。 ObjectAnimator添加Android 3.0(api 11),也许旧版Android可以使用nineoldandroids。我没有用九角龙测试。

答案 1 :(得分:3)

Android 3.0引入了Property Animations

不幸的是,这仅限于Android 3.0及以上版本,不会很快在手机上播放。

答案 2 :(得分:0)

谢谢你@AndreyNick,它就像一个魅力! 我也将它用于LayerDrawable,只为其中的一个Drawable(一层)设置动画。 这是代码,可能对某人有用:

Drawable[] layers = new Drawable[2];
layers[0] = new ColorDrawable(Color.RED);
BitmapDrawable bd = new BitmapDrawable(activity.getResources(), bitmap);
bd.setGravity(Gravity.CENTER);
Drawable drawLogo = bd;
layers[1] = drawLogo;
LayerDrawable layerDrawable = new LayerDrawable(layers);

layers[1].setAlpha(0);

((AppCompatActivity) activity).getSupportActionBar().setBackgroundDrawable(layerDrawable);

ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(layers[1], PropertyValuesHolder.ofInt("alpha", 255));
animator.setTarget(layers[1]);
animator.setDuration(2000);
animator.start();

我需要为Action Bar创建一个drawable:

  • 作为背景颜色和
  • 的层(0)
  • 一层(1) 中间的徽标(带淡化动画)

我用Picasso加载徽标,我喜欢在加载时为它设置动画(位图onBitmapLoaded回调)。

我希望这可以提供帮助!

答案 3 :(得分:-2)

我在ImageView上使用动画显示drawable。我认为这也应该适用于你的情况。