Я добавляю эффект анимации свечения к логотипу. До сих пор мне удавалось получить изображение свечения за логотипом с помощью LayeredDrawable, но я не могу понять, как его анимировать. Я обнаружил, что AlphaAnimation может достичь желаемого эффекта, но, к сожалению, я могу применить его только к Views, а не к Drawables. Как я могу добиться этого эффекта?
Применить анимацию к Drawable в Android
Ответы (4)
В Android 3.0 появилась анимация свойств.
К сожалению, это ограничено Android 3.0 и более поздними версиями, которые не появятся на телефонах в ближайшее время.
Простой пример
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() добавить в апи 19. Но это не большое ограничение, можно сохранять статус в локальную переменную. ObjectAnimator добавить в Android 3.0 (api 11), возможно, старую версию Android можно использовать nineoldandroids. Я не тестировал с девятью андроидами.
Спасибо @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) с логотипом посередине (с анимацией затухания)
Я загружаю логотип с помощью Picasso, и мне нравится анимировать его, когда он загружен (обратный вызов растрового изображения onBitmapLoaded).
Я надеюсь, что это может помочь!
Я использую анимацию в ImageView, отображающую рисуемый объект. Я думаю, что это должно быть возможно и в вашем случае.