#android #animation #alpha
#Android #Анимация #альфа
Вопрос:
Я разрабатываю проект Android.
В этом проекте у меня есть ImageView и кнопка. Когда пользователь нажимает на кнопку, я хочу, чтобы альфа-версия ImageView менялась с 1 на 0,5, а затем сразу менялась с 0,5 на 1.
Я написал следующий код:
public void animate(ImageView imageView)
{
int animDuration = 50;
int timeBetween = 2;
AlphaAnimation animation1 = new AlphaAnimation(1, (float) 0.5);
animation1.setInterpolator(new AccelerateInterpolator());
animation1.setDuration(animDuration);
AlphaAnimation animation2 = new AlphaAnimation((float) 0.5, 1);
animation2.setInterpolator(new AccelerateInterpolator());
animation2.setStartOffset(animDuration timeBetween);
animation2.setDuration(animDuration);
AnimationSet animation = new AnimationSet(true);
animation.addAnimation(animation1);
animation.addAnimation(animation2);
animation.setRepeatCount(1);
imageView.setAnimation(animation);
}
и я передаю свой ImageView этой функции, когда пользователь нажимает на нее.
Но это работает некорректно, и ничего не меняется. В чем проблема?
Комментарии:
1. У вас очень короткие временные значения. возможно, это не заметно вашим глазом. Попробуйте, например, с aimDuration 500 и timeBetween 1000.
2. @Opiatefuchs: нет. я увеличиваю aimDuration до 500, но ничего не изменилось. 🙁
Ответ №1:
Из View.setAnimation()
документации (курсив мой):
Устанавливает следующую анимацию для воспроизведения для этого вида. Если вы хотите, чтобы анимация воспроизводилась немедленно, используйте startAnimation(android.view.animation .Вместо этого анимация). Этот метод позволяет осуществлять детальный контроль над временем начала и недействительностью, но вы должны убедиться, что 1) у анимации установлено время начала, и 2) родительский элемент представления (который управляет анимацией на своих дочерних элементах) будет признан недействительным, когда анимация должна начаться.
Хотя вы установили начальное смещение для animation2
, вы не установили время начала для самого AnimationSet
себя, и, следовательно, представление понятия не имеет, когда начинать анимацию.
Если вы хотите, чтобы анимация начиналась немедленно, используйте startAnimation()
вместо этого. Если вы хотите, чтобы анимация начиналась в определенное время, вызовите setStartTime()
или setStartOffset()
на AnimationSet.
Ответ №2:
Вы можете попробовать использовать этот код анимации:
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="1000"
android:fromAlpha="1"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="0.5"
android:repeatMode="reverse"
android:repeatCount="1"/>
</set>
и установите эту анимацию в своей деятельности следующим образом:
anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.animatealpha);
image.startAnimation(anim);
здесь animatealpha — это имя XML-файла, содержащего вышеупомянутую анимацию.
Надеюсь, это поможет.