Как изменить продолжительность анимации Android AnimationDrawable на лету?

Я новинка для платформы Android. Для анимации набора из 16 "кадров" с помощью AminationDrawable в моем приложении я использую следующее:

В XML-файле у меня есть:

<animation-list 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:oneshot="false">
<item android:drawable="@drawable/image_1" android:duration="200" />
<item android:drawable="@drawable/image_1_25" android:duration="200" /> 
<item android:drawable="@drawable/image_1_5" android:duration="200" />
<item android:drawable="@drawable/image_1_75" android:duration="200" /> 
<item android:drawable="@drawable/image_2" android:duration="200" />
<item android:drawable="@drawable/image_2_25" android:duration="200" /> 
<item android:drawable="@drawable/image_2_5" android:duration="200" />
<item android:drawable="@drawable/image_2_75" android:duration="200" />
<item android:drawable="@drawable/image_3" android:duration="200" />
<item android:drawable="@drawable/image_3_25" android:duration="200" /> 
<item android:drawable="@drawable/image_3_5" android:duration="200" />
<item android:drawable="@drawable/image_3_75" android:duration="200" />
<item android:drawable="@drawable/image_4" android:duration="200" />
<item android:drawable="@drawable/image_4_25" android:duration="200" /> 
<item android:drawable="@drawable/image_4_5" android:duration="200" />
<item android:drawable="@drawable/image_4_75" android:duration="200" /> 
</animation-list>

В Java-коде у меня есть следующий

. Сначала я объявляю класс и добавляю метод onCreate () , в котором я настраиваю анимацию .

public class MyNewActivity extends Activity 
{
    // member variables (accessible from within class methods below).
    AnimationDrawable mainAnimation;
    long mSpeed = 50;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_widget);
        // set up image
        ImageView mainImage = (ImageView) findViewById(R.id.image_widget);
        mainImage.setBackgroundResource(R.drawable.animated_image);
        mainAnimation = (AnimationDrawable) mainImage.getBackground();
    };
<...snip...>

... затем позже я начинаю рисовать, когда пользователь нажимает кнопку, я вызываю следующее, чтобы начать движение анимации:

private void start()
{
    // start the image rotating.
    if (mainAnimation.isRunning())
        mainAnimation.stop();

    int numFrames = mainAnimation.getNumberOfFrames();
    for (int ii = 0; ii < numFrames; ii++ )
    {
        // change the animation speed.
        Drawable d = mainAnimation.getFrame(ii);
        mainAnimation.scheduleDrawable(d, mainAnimation, mSpeed);
    }
}
<...snip...>

Итак, в другом месте кода у меня есть место для настройки переменной-члена мСкорость . Если я сделаю это, а затем вызову start () , анимация запустится, однако скорость всегда будет одинаковой (по сути, то, что было определено в XML выше. Мой вопрос: как я могу изменить "продолжительность "кадров для ускорения / замедления анимации в зависимости от ввода пользователя? Я не вижу возможности изменить состояние" длительности ", и предполагалось, что приведенный выше вызов ScheduleDrawable () изменит длительность кадров чертежа.

14
задан Ωmega 7 March 2018 в 14:14
поделиться