AlphaAnimation не работает
Я искал решение моей проблемы. Но мой код, похоже, в порядке.
Я попытаюсь объяснить: у меня есть TextView с android: alpha = "0" в моем определении макета. Я хочу (при щелчке по изображению) показать, что TextView с AlphaAnimation, от 0.0f до 1.0f.
Моя проблема в том, что когда я нажимаю изображение, ничего не происходит. Но странно, что если я установил его альфа-1 в определении макета, и я нажму на изображение, я смогу увидеть анимацию (альфа-1 → альфа 0 → альфа 1).
Что я делаю неправильно?
Мой код:
TextView tv = (TextView) findViewById(R.id.number);
AlphaAnimation animation1 = new AlphaAnimation(0.0f, 1.0f);
animation1.setDuration(1000);
animation1.setFillAfter(true);
tv.startAnimation(animation1);
Спасибо заранее.
Ответы
Ответ 1
Проблема в android:alpha="0"
. Это свойство устанавливает прозрачность представления http://developer.android.com/reference/android/view/View.html#attr_android:alpha
Когда свойство alpha равно 0, анимация меняет прозрачность от 0*0.0f=0
до 0*1.0f=0
. Когда для свойства alpha установлено значение 1, анимация меняет прозрачность от 1*0.0f=0
до 1*1.0f=1
. Вот почему в первом случае вы не можете видеть текст, а во втором все работает так, как ожидалось.
Чтобы сделать все, вы должны установить свойство видимости в невидимое в макете xml. И перед началом вызова альфа-анимации tv.setVisibility(View.VISIBLE);
Ответ 2
Более простой способ представлен в этом ответе:
tv.animate().alpha(1).setDuration(1000);
Ответ 3
на самом деле, у Android есть ДВА альфа-свойства для просмотра
/**
* The opacity of the View. This is a value from 0 to 1, where 0 means
* completely transparent and 1 means completely opaque.
*/
@ViewDebug.ExportedProperty
float mAlpha = 1f;
/**
* The opacity of the view as manipulated by the Fade transition. This is a hidden
* property only used by transitions, which is composited with the other alpha
* values to calculate the final visual alpha value.
*/
float mTransitionAlpha = 1f;
/**
* Calculates the visual alpha of this view, which is a combination of the actual
* alpha value and the transitionAlpha value (if set).
*/
private float getFinalAlpha() {
if (mTransformationInfo != null) {
return mTransformationInfo.mAlpha * mTransformationInfo.mTransitionAlpha;
}
return 1;
}
вид финальной альфы является продуктом двух альфа
View # setAlpha (float) & Просмотр # animate() & Android: альфа → Малфа
AlphaAnimation → mTransitionAlpha