Студия Android - создание перехода / анимации для ImageView с использованием Interpolator(s)

Мне было интересно, может ли кто-нибудь помочь мне с моим кодом. Ниже приведен код, который я нашел в интернете, и немного его откорректируйте. Поэтому для кнопки устанавливается метод onClickListener, который включает в себя два метода, которые используются при нажатии кнопки. Так что код работает, но не так, как я себе это представлял. Когда кнопка нажата, она исчезает и попадает на экран слева с помощью AccelerateInterpolator. То, что я хотел бы сделать, и для других кнопок, которые находятся в моем приложении, это. когда кнопка нажата, она выходит из своего текущего местоположения (скажем, из-за центра экрана), она вытекает из экрана и затем возвращается в свое местоположение.

Я не знаю, как правильно установить параметры или изменить методы. Спасибо за помощь

button1.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {


            findViewById(R.id.button1);

            TranslateAnimation translation;
            translation = new TranslateAnimation(getDisplayHeight(), 0f, 0f, 0f);
            translation.setStartOffset(500);
            translation.setDuration(2000);
            translation.setFillAfter(true);
            translation.setInterpolator(new AccelerateInterpolator());
            findViewById(R.id.button1).startAnimation(translation);

            button2.setVisibility(View.VISIBLE);


        }

        private int getDisplayHeight() {
            DisplayMetrics metrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(metrics);
            return metrics.widthPixels;
        }

    });

1 ответ

Решение

Итак, во-первых, вы не правильно используете translateanimation.

TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)

Таким образом, чтобы перейти от его текущего местоположения к новому местоположению было бы:

TranslateAnimation(0, 'change in X value you want', 0, 'change in Y value you want')

Во-вторых, чтобы вернуть его, вы можете установить счетчик повторений равным 1 и режим реверса (другой способ сделать это - создать еще одну translationAnimation и объединить их в набор, я считаю, что приведенное ниже проще):

transTo.setRepeatCount(1);
transTo.setRepeatMode(Animation.REVERSE);

В-третьих, возможно, вы уже знаете, но это анимация вида, поэтому кнопка просто визуально изменит место рисования, а не места, где можно нажать. Если это хорошо для ваших целей, тогда переходите к анимации вида. Для перемещения интерактивной области я рекомендую анимацию свойств. Я написал блог о них здесь ЗДЕСЬ а также о просмотре анимации ЗДЕСЬ

Другие вопросы по тегам