Mam animację
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<alpha
android:fromAlpha="0.2"
android:toAlpha="1.0"
android:duration="500"/>
</set>
i ImageView
<ImageView
android:id="@+id/listViewIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/settings"
android:alpha="0.2"/>
i kod:
final Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha);
final ImageView iv = (ImageView) findViewById(R.id.listViewIcon);
anim .setFillAfter(true);
iv.startAnimation(anim);
Tak więc na początku mam ImageView z alfa 0.2 i na końcu chcę mieć ImageView z alfa 1. Ale to nie działa tak - kiedy animacja zaczyna się więcej dodaje alfa i kończy animację alfa 0.2
Co muszę zmienić, aby animować obraz z 0,2-> 1?
Sprawdziłem z różnymi ustawieniami - ustawiłemandroid: alpha = "1.0", fromAlpa = "1.0" toAlpha = "0.2" działa tak, jak się spodziewałem - od alpha 1 do 0.2. Wygląda na to, że alfa z ImageView jest pomnożona przez alfa z animacji ...
Odpowiedzi:
70 dla odpowiedzi № 1Spróbuj tego
AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f);
animation1.setDuration(1000);
animation1.setStartOffset(5000);
animation1.setFillAfter(true);
iv.startAnimation(animation1);
9 dla odpowiedzi nr 2
Ustawienie alfa na 1
przed rozpoczęciem animacji pracował dla mnie:
AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f);
animation1.setDuration(500);
iv.setAlpha(1f);
iv.startAnimation(animation1);
Przynajmniej na moich testach, nie ma migotania z powodu ustawienia alfa przed uruchomieniem animacji, po prostu działa dobrze.
1 dla odpowiedzi nr 3
Hm ...
Coś jest nie tak i być może w prawidłowym działaniu animacji w API Android.
Faktem jest, że kiedy ustawisz w swoim kodzie wartość alpha 0.2f jest oparta na ustawieniach w pliku xml dla androida, oznacza to, że:
0.2f = 0.2f of 0.2f (20% from 100%) ie from 0.2f / 5 = 0.04f
1f = 0.2f
Tak więc twoja animacja działa od 0,04 f do 0,2 f
flaga setFillAfter(true)
na pewno działa, ale musisz to zrozumieć na końcu swojej animacji ImageView
będzie mieć wartość alfa 0,2f zamiast jednego, ponieważ w animacji podajesz 0.2f jako minimalnie akceptowalną wartość (rodzaj maksymalnego kanału alfa).
Więc jeśli chcesz osiągnąć pożądany rezultat, prześlij całą swoją logikę do kodu i manipuluj animacjami w kodzie, zamiast określać w xml.
Powinieneś zrozumieć, że twoje animacje bezpośrednio zależą od dwóch rzeczy:
- LayoutParams of Animated View
- Parametry animacji.
Parametry animacji manipulują twoimi LayoutParams w setFillAftersetFillBefore metody.
1 dla odpowiedzi nr 4
"setStartOffset
"powinno być mniejsze, inaczej animacja zaczyna się od widoku alfa 0.xf
i czeka na przesunięcie początkowe przed animacją do 1f
. Mam nadzieję, że poniższy kod pomaga.
AlphaAnimation animation1 = new AlphaAnimation(0.1f, 1f);
animation1.setDuration(1000);
animation1.setStartOffset(50);
animation1.setFillAfter(true);
view.setVisibility(View.VISIBLE);
view.startAnimation(animation1);
1 dla odpowiedzi nr 5
<ImageView
android:id="@+id/listViewIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/settings"/>
Usunąć android:alpha=0.2
z XML-> ImageView.