2013-12-17 2 views
34

У меня есть анимацияAndroid Анимация Альфа

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

и ImageView

<ImageView 
    android:id="@+id/listViewIcon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/settings" 
    android:alpha="0.2"/> 

и код:

final Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha); 
final ImageView iv = (ImageView) findViewById(R.id.listViewIcon); 
anim .setFillAfter(true); 
iv.startAnimation(anim); 

Так в начале у меня ImageView с альфа 0,2 и в то end Я хочу иметь ImageView с альфа-1. Но он не работает так - когда анимация начинается с добавления альфы, а анимация finis ч с альфой 0,2

Что мне нужно изменить, чтобы оживить мое изображение с 0.2-> 1?

Я проверил с различными настройками - я установил android: alpha = "1.0", fromAlpa = "1.0" toAlpha = "0.2" работает так, как я ожидал - от альфы от 1 до 0,2. Похоже, что альфа от ImageView умножается на альфа от анимации ...

+0

Чтобы предотвратить переход от 0.2 до альфа в конце, используйте атрибут 'fillAfter': http://developer.android.com/reference/android/view/animation/Animation.html#attr_android:fillAfter – Jave

+0

это не так. Альфа не переходит к 1. Когда я одушевляюсь от 1-> 0,2, он отлично работает и остается на 0,2 (я использую заливку после). Когда я хочу оживить от 0,2 до 1, он исчезает почти до 0 и идет до 0,2 – wioskamala

+0

, если вы установили 'fillEnabled' в true? – Jave

ответ

64

Попробуйте

AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f); 
animation1.setDuration(1000); 
animation1.setStartOffset(5000); 
animation1.setFillAfter(true); 
iv.startAnimation(animation1) 
+1

Тот же результат, что и в моем примере ... – wioskamala

+0

перетащите альфа из свойств изображения и приложения uninsatll с вашего устройства. очистить, построить и установить снова. потому что он работает со своей стороной –

+0

Я не хочу удалять альфа-изображение, должно быть бледно с альфой 0,2. Aplication делает некоторые вещи, и когда все готово, я хочу, чтобы мое изображение было анимировано до альфы 1. – wioskamala

1
<ImageView 
    android:id="@+id/listViewIcon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/settings"/> 

Удалить android:apha=0.2 из XML-> ImageView.

1

Хм ...

Дело не так, и, возможно, в правильной работе анимации в Android API.

Дело в том, что при установке в программном коде значения альфа-0.2f базируется на параметрах в файле XML для андроид, то это значит, что:

0.2f = 0.2f of 0.2f (20% from 100%) ie from 0.2f/5 = 0.04f 
1f = 0.2f 

Так ваша анимация на самом деле работает от 0,04 е к 0.2f

флаг setFillAfter(true) конечно работает, но вы должны понимать, что в конце анимации ImageView будет иметь значение альфа 0.2f вместо одного, потому что вы задаете 0.2f как умеренно акк ептимое значение в анимации (своего рода максимальный альфа-канал).

Так что, если вы хотите, чтобы желаемый результат нести всю вашу логику для вашего кода и манипулировать анимацией в коде вместо определения в xml.

Вы должны понимать, что ваши анимации напрямую зависит от двух вещей:

  • LayoutParams мультипликационных Посмотреть
  • параметры анимации.

Параметры анимации манипулировать LayoutParams в setFillAfter \ методы setFillBefore.

+0

Да. Ты прав. Когда я меняю параметры исходного макета на свой код, он работал как шарм! –

9

Установка альфа в 1 перед началом анимации работал для меня:

AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f); 
animation1.setDuration(500); 
iv.setAlpha(1f); 
iv.startAnimation(animation1); 

По крайней мере, на моих тестах, нет мерцания из-за установки альфа перед началом анимации. Он просто отлично работает.

+0

Это тоже работало для меня (редактирование: моя ошибка, у меня есть XML-интерференция: андроид: альфа = «0»). Поиграю с этим немного, но мне нужно, чтобы он начинался с 0, так что это работает сейчас. Благодарю. –

Смежные вопросы