Как использовать рисованную анимацию при нажатии кнопки

#android #android-animation #android-button

#Android #android-анимация #android-кнопка

Вопрос:

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

Но НИЧЕГО не получалось.

Я попробовал это:

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/pressed" />
    <item android:state_pressed="false" android:drawable="@drawable/lostpressd" />
</selector>

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/e1" android:duration="50" />
    <item android:drawable="@drawable/e2" android:duration="50" />
    and so on 
  

и потерянное нажатие в обратном порядке.

Комментарии:

1. Чего вы на самом деле хотите? Эффект щелчка при нажатии кнопки?

2. Как следует из названия, при нажатии кнопки должна воспроизводиться анимация с возможностью рисования.

Ответ №1:

я решил вашу проблему:

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/image1" android:state_pressed="true" />
    <item android:drawable="@drawable/image2" android:state_pressed="false" />
</selector>

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item
        android:drawable="@drawable/image1"
        android:duration="200" />
    <item
        android:drawable="@drawable/image2"
        android:duration="200" />
    <item
        android:drawable="@drawable/image3"
        android:duration="200" />
</animation-list>
  

в вашей деятельности :

  final ImageView img = (ImageView) findViewById(R.id.my_img);
    img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            img.setBackgroundResource(R.drawable.anim);
            AnimationDrawable animationDrawable = (AnimationDrawable) img.getBackground();
            animationDrawable.setVisible(true, true);
            animationDrawable.start();

        }
    });
  

Комментарии:

1. Привет, спасибо за вашу попытку. Но я не использую ImageView. И на кнопке я получаю android.graphics.drawable. StateListDrawable не может быть преобразован в android.graphics.drawable. Анимациярисовываемая

Ответ №2:

Сначала создайте анимационный векторный рисунок. Это довольно хороший (простой) урок:https://medium.com/@naththeprince/delightful-animations-in-android-d6e9c62a23d3. Далее в вашем xml файле определите обычную кнопку, вот так:

 <Button
  android:drawableLeft="@drawable/your_animated_vector_drawable"
  android:id="@ id/example_button"/>
  

и добавьте любые другие свойства, которые вы хотите внутри Button .

В вашем коде используйте это:

 Button button = (Button) findViewById(R.id.example_button);
button.setOnClickListener(v -> {
  // Get the left drawable: (the one you set in the xml file)
  AnimatedVectorDrawable avd =
    (AnimatedVectorDrawable) showPopup.getCompoundDrawables()[0];
  avd.start();
});
  

У меня это сработало. Надеюсь, это сработает и у вас!