#android #animation
#Android #Анимация
Вопрос:
В Activity у меня есть три вида (среди прочих): TextView, ImageView и LinearLayout — последнее я вызываю controlsView
. Существует метод (вызовите его, toggleControls()
чтобы переключить видимость controlsView
с анимацией. Анимация довольно простая и создается при каждом вызове метода, вот так:
private void toggleControls () {
if (controlsView.getAnimation () != null) {
return; // already animating
}
if (controlsView.getVisibility () == View.GONE) {
Animation animation = new ScaleAnimation (1, 1, 0, 1);
animation.setAnimationListener (new AnimationListener () {
public void onAnimationEnd (Animation animation) { controlsView.setAnimation (null); }
public void onAnimationRepeat (Animation animation) {}
public void onAnimationStart (Animation animation) { controlsView.setVisibility (View.VISIBLE); }
});
animation.setDuration (500);
controlsView.setAnimation (animation);
animation.startNow ();
} else {
// hide
Animation animation = new ScaleAnimation (1, 1, 1, 0);
animation.setAnimationListener (new AnimationListener () {
public void onAnimationEnd (Animation animation) { controlsView.setAnimation (null); controlsView.setVisibility (View.GONE); }
public void onAnimationRepeat (Animation animation) {}
public void onAnimationStart (Animation animation) {}
});
animation.setDuration (500);
controlsView.setAnimation (animation);
animation.startNow ();
}
}
Кажется, это работает нормально, когда вызывается после касания TextView, но когда я вызываю его после касания ImageView, я никогда не вижу воспроизведения анимации. Вместо этого состояние представления (как отображается) не меняется… пока я не коснусь чего-нибудь на экране, и в этот момент controlsView
сразу появится или исчезнет. (Это, кстати, на планшете Xoom под управлением Android 3.0.1.)
Для полноты картины, слегка упрощенный XML для представлений, на которые нажимается:
<TextView android:id="@ id/first"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:onClick="pressedFirst" android:clickable="true"
android:text="xxxxxxxxxxxxxxxxxxxxxx"></TextView>
<ImageView android:id="@ id/second"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:onClick="pressedSecond" android:clickable="true"
android:src="@drawable/something"></ImageView>
… и для controlsView:
<LinearLayout android:id="@ id/controls"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:visibility="visible" android:orientation="horizontal">
<Button android:id="@ id/importantButton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:onClick="pressedFilterButton" android:text="Important"></Button>
</LinearLayout>
Функции, упомянутые в приведенном выше XML, просто вызывают toggleControls()
метод.
Я подозреваю, что я неправильно понимаю что-то фундаментальное здесь. Не мог бы кто-нибудь дать мне подсказку, пожалуйста?
Комментарии:
1. style=»@android: стиль / виджет. ImageButton «для ImageView работает для меня 🙂
Ответ №1:
Просто высказываю предположение, но, возможно, вам нужно вызвать Drawable.invalidateSelf()? Я знаю, что мне нужно было это сделать, когда анимация не появлялась, но не уверен, сталкиваетесь ли вы с точно такой же проблемой.