Android - 动画视图中的getAlpha()

Bla*_*ack 3 java animation android alpha

我有这样的动画:

Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setInterpolator(new DecelerateInterpolator());
fadeOut.setDuration(350);
myView.startAnimation(fadeOut);
Run Code Online (Sandbox Code Playgroud)

我正在努力的是让它的Alpha在动画中如此:

System.out.println(myView.getAlpha());
Run Code Online (Sandbox Code Playgroud)

但是,它始终在整个动画中返回"1.0".如何myView在动画过程中获取实际的alpha值?

Kei*_*OYS 5

通过Transformation与您一起使用AlphaAnimation,您可以直接从AlphaAnimation对象而不是您的对象中检索alpha值View.

使用转换的目的:

定义要在动画的一个时间点应用的变换.


脚步:

  1. 创建一个新Transformation.java类,如https://sourcegraph.com/android.googlesource.com/platform/frameworks/base/-/blob/core/java/android/view/animation/Transformation.java中所示.

  2. 初始化Transformation对象:

    private Transformation myTransformation;
    mTransformation = new Transformation();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用你的代码:

    Animation fadeOut = new AlphaAnimation(1, 0);
    fadeOut.setInterpolator(new DecelerateInterpolator());
    fadeOut.setDuration(350);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 获取视图层次结构图的开始时间(以毫秒为单位):

    final long time = myView.getDrawingTime();
    
    Run Code Online (Sandbox Code Playgroud)
  5. 获取要在指定时间点应用的转换.最后,在动画期间获取实际的alpha值:

    fadeOut.getTransformation(time, myTransformation);
    final float myAlphaValue = myTransformation.getAlpha();
    
    Run Code Online (Sandbox Code Playgroud)

资源:https : //sourcegraph.com/android.googlesource.com/platform/frameworks/base/-/blob/core/java/android/widget/ProgressBar.java#L1699 https://developer.android.com/reference /android/view/animation/Animation.html https://developer.android.com/reference/android/view/animation/Transformation.html