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