Как постоянно перемещать изображение вверх и вниз, используя анимацию перевода в Android? - PullRequest
20 голосов
/ 02 сентября 2011

Я успешно выполнил одностороннюю анимацию, используя 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

Ответы [ 3 ]

44 голосов
/ 12 апреля 2012

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

   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>

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

7 голосов
/ 02 сентября 2011

Вам необходимо установить свойство повтора

андроида: repeatMode

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

Animation a;
a.setRepeatMode(Animation.REVERSE);
2 голосов
/ 02 сентября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...