在Android中为Drawable应用动画

8

我正在为一个标志添加发光动画效果。到目前为止,我已经使用LayeredDrawable将发光图像放在了标志后面,但我无法弄清如何对其进行动画处理。我发现AlphaAnimation可以实现所需的效果,但不幸的是我只能将其应用于Views而非Drawables。我该如何实现这个效果?

4个回答

9

简单示例

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();
        }
    }
});

在API 19中添加了方法getAlpha()。但这并不是一个很大的限制,你可以将状态保存在本地变量中。ObjectAnimator在Android 3.0(API 11)中添加,也许旧版本的Android可以使用NineOldAndroids库。我没有测试过NineOldAndroids。


太好了!我只需要动画背景透明度颜色,而不是ImageView表面的可绘制图标。这种方法确实有帮助。谢谢。 - Nezneika

3

Android 3.0推出了属性动画

不幸的是,此功能仅限于Android 3.0及以上版本,而这些版本还不会很快到达手机上。


1
感谢 @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();

我需要为操作栏创建一个可绘制对象,其中包括:

  • 一层(0),是背景颜色
  • 一层(1),中间带有标志性的logo(带淡入淡出动画)

我使用Picasso加载logo,并希望在加载完成后(bitmap onBitmapLoaded回调)对其进行动画处理。

希望这能帮到你!


-2
我正在使用动画在ImageView上显示可绘制对象。我认为在你的情况下也应该是可能的。

不幸的是,分层可绘制似乎会创建一个单独的ImageView。因此,如果我应用Alpha动画,它将应用于标志和发光。 - Casebash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接