web-dev-qa-db-ja.com

Android Animation Alpha

私はアニメーションを持っています:

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

したがって、最初はアルファ0.2のImageViewがあり、最後にはアルファ1のImageViewが必要です。しかし、そのようには動作しません。

イメージを0.2から1までアニメーション化するには、何を変更する必要がありますか?

さまざまな設定で確認しました-Android:alpha="1.0"fromAlpa="1.0"toAlpha="0.2"を設定しました-アルファ1から0.2まで、期待どおりに動作します。 ImageViewのアルファにアニメーションのアルファを掛けたように見えます...

51
wioskamala

これを試して

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

少し遅れるかもしれませんが、Androidドキュメントで lovely solution が見つかりました。

//In transition: (alpha from 0 to 0.5)
view.setAlpha(0f);
view.setVisibility(View.VISIBLE);
view.animate()
   .alpha(0.5f)
   .setDuration(400)
   .setListener(null);

//Out transition: (alpha from 0.5 to 0)
view.setAlpha(0.5f)
view.animate()
   .alpha(0f)
   .setDuration(400)
   .setListener(new AnimatorListenerAdapter() {
           @Override
           public void onAnimationEnd(Animator animation) {
           view.setVisibility(View.GONE);
         }
    });
18
Julián M.

アニメーションを開始する前にアルファを1に設定するとうまくいきました:

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

少なくとも私のテストでは、アニメーションを開始する前にアルファを設定するため、ちらつきはありません。正常に動作します。

15
Iván Pérez

Kotlin Version

次のようにViewPropertyAnimatorを使用します。

iv.alpha = 0.2f
iv.animate().apply {
    interpolator = LinearInterpolator()
    duration = 500
    alpha(1f)
    startDelay = 1000
    start()
}
10
aminography

setStartOffset」は小さくする必要があります。そうでない場合、アニメーションはビューalpha 0.xfで開始し、1fにアニメートする前に開始オフセットを待機します。次のコードが役立つことを願っています。

AlphaAnimation animation1 = new AlphaAnimation(0.1f, 1f);

animation1.setDuration(1000);
animation1.setStartOffset(50);

animation1.setFillAfter(true);

view.setVisibility(View.VISIBLE);

view.startAnimation(animation1);
<ImageView
    Android:id="@+id/listViewIcon"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:src="@drawable/settings"/>  

XML-> ImageViewからAndroid:alpha=0.2を削除します。

1
Pavlik Zavarski

うーん...

問題は間違っており、おそらくAndroid AP​​Iのアニメーションの適切な操作に問題があります。

実際、コードにアルファ値0.2fを設定すると、Androidのxmlファイルの設定に基づいているということです:

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

あなたのアニメーションは実際に動作します.04fから0.2f

flag setFillAfter(true)は確かに機能しますが、アニメーションの最後にImageViewのアルファ値は1ではなく.2fになることを理解する必要があります。アニメーションで許容できる値(一種の最大アルファチャネル)。

したがって、目的の結果を得るには、すべてのロジックをコードに伝え、xmlで決定するのではなく、コードでアニメーションを操作する必要があります。

アニメーションは次の2つの要素に直接依存することを理解してください。

  • アニメーションビューのLayoutParams
  • アニメーションパラメータ。

アニメーションパラメータは、setFillAfter\setFillBeforeメソッドでLayoutParamsを操作します。

1