Применить анимацию к рисованию в Android - PullRequest
7 голосов
/ 25 мая 2010

Я добавляю эффект анимации свечения в логотип. До сих пор мне удалось получить изображение свечения за логотипом с помощью LayeredDrawable, но я не могу понять, как его анимировать. Я обнаружил, что AlphaAnimation достигнет желаемого эффекта, но, к сожалению, я могу применять его только к представлениям, а не к Drawables. Как мне добиться этого эффекта?

Ответы [ 4 ]

6 голосов
/ 11 ноября 2014

Простой пример

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 . Я не тестировал с девяти старыми андроидами.

3 голосов
/ 22 мая 2011

Представлена ​​Android 3.0 Анимации свойств .

К сожалению, это ограничено Android 3.0 и выше, что не будет в ближайшее время на телефон.

0 голосов
/ 17 апреля 2018

Спасибо @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) с логотипом посередине (с исчезающей анимацией)

Я загружаю логотип с Пикассо, и мне нравится анимировать его, когда естьбыл загружен (точечный рисунок onBitmapLoaded callback).

Надеюсь, это может помочь!

0 голосов
/ 25 мая 2010

Я использую анимацию в ImageView, отображающую рисование. Я думаю, что это должно быть возможно и в вашем случае.

...