/ / Android Animation Alpha - Android, animacja, alfa

Android Animation Alpha - Android, animacja, alfa

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 № 1

Spró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.