Анимация переворота карты

163
25 июля 2018, 22:00

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

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

Answer 1

Использую вот такой класс:

public class FlipAnimation implements Animation.AnimationListener {
    private Animation animation1;
    private Animation animation2;
    private boolean isBackOfCardShowing = true;
    private ImageView img;
    private Context ctx;
    private FlipEnd flipped;
    Card card;
    public interface FlipEnd {
        void flipEnd(ImageView img, Card card);
    }
    FlipAnimation(Context ctx, ImageView img, Card card) {
        this.img = img;
        this.ctx = ctx;
        this.card = card;
        flipped = (FlipEnd) ctx;
        animation1 = AnimationUtils.loadAnimation(ctx, R.anim.flip_to_middle);
        animation1.setAnimationListener(this);
        animation2 = AnimationUtils.loadAnimation(ctx, R.anim.flip_from_middle);
        animation2.setAnimationListener(this);
        img.clearAnimation();
        img.setAnimation(animation1);
        img.startAnimation(animation1);
    }
    @Override
    public void onAnimationStart(Animation animation) {
    }
    @Override
    public void onAnimationEnd(Animation animation) {
        if (animation == animation1) {
            if (isBackOfCardShowing) {    
                img.setImageResource(R.drawable.card_face);
                flipped.flipEnd(img,card);
            } else {
                img.setImageResource(R.drawable.card_back);
            }
            img.clearAnimation();
            img.setAnimation(animation2);
            img.startAnimation(animation2);
        } else {
            isBackOfCardShowing = !isBackOfCardShowing;
        }
    }
    @Override
    public void onAnimationRepeat(Animation animation) {
    }
}

Тут еще сразу добавлен интерфэйс, чтобы отслеживать, когда и какая карта перевернулась. Кастомизируйте его, как хотите.

R.anim.flip_to_middle.xml :

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="250"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="0.0"
    android:toYScale="1.0" />

flip_from_middle.xml:

<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0.0" android:toXScale="1.0"
    android:pivotX="50%"
    android:fromYScale="1.0" android:toYScale="1.0"
    android:pivotY="50%"
    android:duration="250" />

Вызывать там, где надо: new FlipAnimation(YourActivity.this, cardImage);

Попробуйте, эффект будет как будто переворачивается карта :)

READ ALSO
Как хранить и редактировать данные?

Как хранить и редактировать данные?

Есть два устройства ардуино, на ней работает акваконтроллер, и андроид-устройство(телефон) на котором я хочу редактировать настройки контроллераВидится...

169
Scanner, FileOutputStream и чтение double

Scanner, FileOutputStream и чтение double

Недавно изучаю JavaНабросал код который копирует double значения из одного файла в другой

169
Hibernate ошибка преобразования MySQL JSON UTF8

Hibernate ошибка преобразования MySQL JSON UTF8

Для расширения типов Hibernate использую vladmihalcea/hibernate-types

191
Проблема с XML и отрисовкой чего-либо с него

Проблема с XML и отрисовкой чего-либо с него

У меня есть самый простой, насколько это возможно, XML-файл

178