Подтвердить что ты не робот

Как перемещать изображение вверх и вниз непрерывно, используя трансляцию анимации в Android?

Я успешно выполнил одностороннюю анимацию, используя Translate Animation означает, что изображение идет сверху вниз. Вот код:

private ImageView mScanner;
private Animation mAnimation;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mScanner = (ImageView)findViewById(R.id.Scanner);

    mAnimation = new TranslateAnimation(0, 0, 0, 500);
    mAnimation.setDuration(10000);
    mAnimation.setFillAfter(true);
    mAnimation.setRepeatCount(-1);
    mAnimation.setRepeatMode(Animation.REVERSE);
    mScanner.setAnimation(mAnimation);
    mScanner.setVisibility(View.VISIBLE);
}

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

Примечание: выполните обратный режим. См. Код. Но теперь проблема в том, что она оставляет линии при движении снизу вверх. Как прикрепленный образ. Как удалить эти строки? screenshot

4b9b3361

Ответ 1

Измените код в соответствии с этим:

   mScanner.setVisibility(View.VISIBLE);
   mAnimation = new TranslateAnimation(
            TranslateAnimation.ABSOLUTE, 0f,
            TranslateAnimation.ABSOLUTE, 0f,
            TranslateAnimation.RELATIVE_TO_PARENT, 0f,
            TranslateAnimation.RELATIVE_TO_PARENT, 1.0f);
   mAnimation.setDuration(10000);
   mAnimation.setRepeatCount(-1);
   mAnimation.setRepeatMode(Animation.REVERSE);
   mAnimation.setInterpolator(new LinearInterpolator());
   mScanner.setAnimation(mAnimation);

И, кроме того, используйте xml, а не изображение. Пожалуйста, ознакомьтесь с приведенным ниже кодом и поместите его в ImageView src.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">
    <solid android:color="#0000FF"/>
    <size android:width="480dp"
        android:height="10dp"/>
    <corners android:radius="1dp"/>
    <stroke android:width="3dp"
        android:color="#000000"/>
</shape>

Надеюсь, это поможет вам.

Ответ 2

Вам нужно установить свойство repeat

андроида: repeatMode

внутр. Как анимация ведет себя, когда она достигает конца анимации. android: repeatCount должен быть установлен на положительное целое число или "-1", чтобы этот атрибут имел эффект. Установите "reverse", чтобы иметь обратное направление анимации с каждой итерацией или "повторить", чтобы каждый цикл анимации начинался с начала.

Animation a;
a.setRepeatMode(Animation.REVERSE);

Ответ 3

Я думаю, вам нужно удалить mAnimation.setFillAfter(true);, потому что это означает, что он останется навсегда, где он остановится.

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