Jef*_*rod 1 android fadeout android-animation
我正试图淡出ImageView使用动画.动画运行,淡出ImageView,然后图像变回完全不透明.为什么会这样?
private void fadeOutImage() {
final ImageView imageView = (ImageView) activity.findViewById(R.id.imageView);
imageView.startAnimation(AnimationUtils.loadAnimation(activity, R.anim.fadeout));
}
Run Code Online (Sandbox Code Playgroud)
我尝试将alpha设置为零,如下所示,但随后图像从未出现过.为什么不?
private void fadeOutImage() {
final ImageView imageView = (ImageView) activity.findViewById(R.id.imageView);
imageView.setAlpha(0);
imageView.startAnimation(AnimationUtils.loadAnimation(activity, R.anim.fadeout));
}
Run Code Online (Sandbox Code Playgroud)
为了使这个工作,我必须创建一个AnimationListener,重载onAnimationEnd,并将alpha设置为零.为什么?
final ImageView imageView = (ImageView) activity.findViewById(id);
Animation animation = AnimationUtils.loadAnimation(activity, R.anim.fadeout);
animation.setAnimationListener(new AnimationListener() {
@Override public void onAnimationStart(Animation animation) {
imageView.setAlpha(255);
}
@Override public void onAnimationRepeat(Animation animation) { }
@Override public void onAnimationEnd(Animation animation) {
imageView.setAlpha(0);
}
});
imageView.startAnimation(animation);
Run Code Online (Sandbox Code Playgroud)
动画XML:
<alpha
android:duration="1500"
android:fromAlpha="1.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="0.0" />
Run Code Online (Sandbox Code Playgroud)
当你开始一个动画时,它实际上采用当前视图的任何视图,根据你提供的动画动画它,但实际上并没有真正改变视图的状态.
这可能会让人感到困惑,但在第一种情况下,在动画结束后,ImageView只会返回到动画前的样子 - 在您的情况下,正常的不透明.
在你的第二个例子,你设定的α为零之前的动画开始,所以当动画开始播放时,图像已经是不可见的,所以动画这种无形的ImageView -你可以不看.
因此,所需的顺序是在更改ImageView之前启动动画,让它播出,然后在动画结束的那一刻,更改ImageView的状态,使其在重新绘制到原始状态之前消失.这是最重要的onAnimationEnd().
因此,回顾一下,在正确的实现中,有两个因素会影响ImageView的绘制方式:
imageView.setAlpha(0);方法调用,以保持图像不可见的,一旦动画完成.注意:为了提高性能,我建议使用
imageView.setVisibility(View.INVISIBLE);
Run Code Online (Sandbox Code Playgroud)
代替 imageView.setAlpha(0);
| 归档时间: |
|
| 查看次数: |
3891 次 |
| 最近记录: |