Как связать анимацию в андроиде с таким же видом? - PullRequest
8 голосов
/ 07 июня 2011

У меня есть несколько текстовых представлений, и я хочу сделать эффект жужжания MSN.

Мой план таков:

  • возьмите вид, скажем, 10dip влево,
  • верните его в исходное положение
  • после этого возьмите его на 10 пунктов вверх
  • , затем назад
  • вниз назад
  • влево ...и т. д.

Суть в том, что у меня есть некоторая последовательность движений, которую я хочу установить для одного вида и которая должна выполняться один за другим.

Как я могу это сделатьчто?

Ответы [ 3 ]

20 голосов
/ 12 января 2016

Вы, вероятно, имеете в виду AnimatorSet (не AnimationSet ).Как написано в документации:

Этот класс воспроизводит набор Animator объектов в указанном порядке .Анимации могут быть настроены для воспроизведения вместе, последовательно или после указанной задержки.

Существует два различных подхода к добавлению анимации в AnimatorSet: для вызова методов playTogether() или playSequentially()добавить набор анимаций сразу, или play(Animator) может использоваться вместе с методами класса Builder для добавления анимаций одна за другой.

Анимация, которая перемещается на view на-100px для 700ms и затем исчезает во время 300ms:

final View view = findViewById(R.id.my_view);

final Animator translationAnimator = ObjectAnimator
        .ofFloat(view, View.TRANSLATION_Y, 0f, -100f)
        .setDuration(700);

final Animator alphaAnimator = ObjectAnimator
        .ofFloat(view, View.ALPHA, 1f, 0f)
        .setDuration(300);

final AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playSequentially(
        translationAnimator,
        alphaAnimator
);
0 голосов
/ 27 сентября 2017

У меня есть начало класса, совместимого с SDK 15, который можно использовать для создания сложных цепочек анимации, надеюсь, он кому-нибудь поможет.Вы должны быть в состоянии следовать шаблону проектирования, чтобы добавить свои собственные методы.Пожалуйста, прокомментируйте их здесь, и я обновлю ответ, Ура!

package com.stuartclark45.magicmatt.util;

import java.util.LinkedList;
import java.util.List;

import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.view.View;

    /**
     * Used to build complex animations for a view. Example usage bellow makes view move out to the
     * right whilst rotating 45 degrees, then move out to the left.
     *
     * {@code
     *  int rotateDuration = 200;
     *  int rotation = 45;
     *  new AnimationBuilder(view)
     *    .translationX(100, rotateDuration)
     *    .rotateTo(rotation, rotateDuration)
     *    .then()
     *    .translationX(-200, rotateDuration)
     *    .start();
     * }
     *
     * @author Stuart Clark
     */

    public class AnimationBuilder {

      private View view;
      private List<Animator> setsList;
      private List<Animator> buildingList;

      public AnimationBuilder(View view) {
        this.view = view;
        this.setsList = new LinkedList<>();
        this.buildingList = new LinkedList<>();
      }

      public AnimationBuilder rotateTo(float deg, long duration) {
        buildingList.add(ObjectAnimator.ofFloat(view, "rotation", deg).setDuration(duration));
        return this;
      }

      public AnimationBuilder translationX(int deltaX, long duration) {
        buildingList.add(ObjectAnimator.ofFloat(view, "translationX", deltaX).setDuration(duration));
        return this;
      }

      public AnimationBuilder translationY(int deltaX, long duration) {
        buildingList.add(ObjectAnimator.ofFloat(view, "translationY", deltaX).setDuration(duration));
        return this;
      }

      public AnimationBuilder then() {
        createAniSet();
        // Reset the building list
        buildingList = new LinkedList<>();
        return this;
      }

      public void start() {
        createAniSet();
        AnimatorSet metaSet = new AnimatorSet();
        metaSet.playSequentially(setsList);
        metaSet.start();
      }

      private void createAniSet() {
        AnimatorSet aniSet = new AnimatorSet();
        aniSet.playTogether(buildingList);
        setsList.add(aniSet);
      }


    }
0 голосов
/ 07 июня 2011

Использовать AnimationSet :

AnimationSet set = new AnimationSet(true);

Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(100);
set.addAnimation(animation);

animation = new TranslateAnimation(
    Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,
    Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f
);
animation.setDuration(500);
set.addAnimation(animation);

view.startAnimation( set );
...