Я пытаюсь переместить вид в макете и воспроизводить анимацию, не мигая. До сих пор мне удавалось воспроизводить анимацию, которую можно рисовать, и воспроизводить другую анимацию с переводом для перемещения представления, но оно мерцает. Код, который я использую для перевода:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:fillEnabled="true"
android:fillAfter="true">
<!--Move-->
<translate
android:duration="400"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:toXDelta="-100%"
android:toYDelta="0%"/>
</set>
Это для левого движения, остальные 3 направления имеют ту же логику.
Другие анимации, которые я использую для фона этого вида, когда он движется, не имеют значения, и с ними нет проблем.
Теперь к тому, что я использую для перемещения вида:
private void moveView(final View view, final int coordX, final int coordY, final int direction){
runOnUiThread(new Runnable() {
@Override
public void run() {
Animation animMove;
switch(direction){
case 1: // top
animMove = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.move_top);
break;
case 2: // right
animMove = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.move_right);
break;
case 3: // bottom
animMove = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.move_bottom);
break;
default: // left = 4
animMove = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.move_left);
break;
}
AnimationListener listener = new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) { }
@Override
public void onAnimationEnd(Animation animation) {
view.clearAnimation();
view.setX(coordX*side);
view.setY(coordY*side);
}
@Override
public void onAnimationRepeat(Animation animation) { }
};
animMove.setAnimationListener(listener);
view.startAnimation(animMove);
}
});
}
Дело в том, что я хочу переместить это представление несколько раз (количество ходов не фиксировано). И каждый раз, когда я перемещаю вид, он мерцает. Не имеет значения, является ли android: fillAfter истинным или ложным - он либо мигает назад или вперед, прежде чем перейти к тому месту, где он находился (координаты), в зависимости от того, истинно оно или ложно.
Это может быть из-за того, что я использую 2 анимации - 1 на фоне вида и 2 для движения, и он очищает их обоих. Я понятия не имею, как это исправить. Это разрушает пользовательский опыт, который я себе представлял.
Должен ли я поместить другое представление в представление для удержания фоновой анимации, чтобы оно не останавливало фоновую анимацию при попытке очистить анимацию движения (будет ли даже работать IDK) или есть более разумное решение?