Programing

Android 애니메이션 알파

lottogame 2020. 12. 29. 06:39
반응형

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

그래서 처음에는 ImageViewalpha 0.2를 가지고 있고 마지막 ImageView에는 alpha 를 갖고 싶습니다 1. 하지만 그렇게 작동하지 않습니다. 애니메이션이 시작되면 더 많은 알파가 추가되고 애니메이션이 알파로 종료됩니다.0.2

내 이미지에 애니메이션을 적용하려면 무엇을 변경 0.2해야 1합니까?

나는 여러 설정을 확인했지만 - 내가 설정 android:alpha="1.0", fromAlpa="1.0", toAlpha="0.2"내가 예상처럼 작동 - 알파에서 10.2. ImageView애니메이션의 알파를 곱한 것 같습니다 .


이 시도

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

조금 늦을 수도 있지만 Android 문서에서 멋진 솔루션찾았습니다 .

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

1애니메이션을 시작 하기 전에 알파를로 설정하면 저에게 효과적이었습니다.

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

적어도 내 테스트에서는 애니메이션을 시작하기 전에 알파를 설정하기 때문에 깜박임이 없습니다. 잘 작동합니다.


Kotlin Version

다음 ViewPropertyAnimator과 같이 사용 하십시오.

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

" setStartOffset"은 더 작아야합니다. 그렇지 않으면 애니메이션이 알파보기에서 시작하고에 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);

흠 ...

문제가 잘못되었으며 Android API에서 애니메이션이 올바르게 작동 할 수 있습니다.

사실 코드에 알파 값 0.2f를 설정하면 android 용 xml 파일의 설정을 기반으로한다는 것은 다음을 의미합니다.

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

따라서 애니메이션은 실제로 0.04f에서 0.2f까지 작동합니다.

flag setFillAfter(true) certainly works, but you need to understand that at the end of your animation ImageView will have the alpha value 0.2f instead of one, because you specify 0.2f as marginally acceptable value in the animation (a kind of maximum alpha channel).

So if you want to have the desired result shall carry all your logic to your code and manipulate animations in code instead of determining in xml.

You should understand that your animations directly depends of two things:

  • LayoutParams of Animated View
  • Animation parameters.

Animation parameters manipulate your LayoutParams in setFillAfter\setFillBefore methods.


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

Remove android:alpha=0.2 from XML-> ImageView.

ReferenceURL : https://stackoverflow.com/questions/20628973/android-animation-alpha

반응형