您的位置:首页 > 移动开发 > Android开发

ImageSwitcher 短暂白屏

2016-03-30 11:30 549 查看
ImageSwitcher 启动Activity时会有短暂的白屏。

原因:ImageSwitcher 设置了动画(淡入淡出动画),如果不设置动画就没有白屏问题。

比如如下代码片段:

is_fade = (ImageSwitcher) findViewById(R.id.is_fade);
is_fade.setFactory(this);
// 动画的顺序一定要放到最后
is_fade.setInAnimation(this, R.anim.fade_in);
is_fade.setOutAnimation(this, R.anim.fade_out);
is_fade.setImageResource(bgs[3]);


原理:

当调用setImageResource()时, 该方法内部调用showNext() 方法,然后调用setDisplayedChild()方法,再调用showOnly(mWhichChild);

我们来看看showOnly 方法

void showOnly(int childIndex, boolean animate) {
final int count = getChildCount();
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (i == childIndex) {
// 会先执行动画在显示ImageView,导致白屏
if (animate && mInAnimation != null) {
child.startAnimation(mInAnimation);
}
child.setVisibility(View.VISIBLE);
mFirstTime = false;
} else {
if (animate && mOutAnimation != null && child.getVisibility() == View.VISIBLE) {
child.startAnimation(mOutAnimation);
} else if (child.getAnimation() == mInAnimation)
child.clearAnimation();
child.setVisibility(View.GONE);
}
}
}


所以需要将动画的设置放到最后,这样启动activity时立马会显示图片。

就是这么简单,衰!!!!!

is_fade = (ImageSwitcher) findViewById(R.id.is_fade);
is_fade.setFactory(this);
is_fade.setImageResource(bgs[3]);
// 动画的顺序一定要放到最后
is_fade.setInAnimation(this, R.anim.fade_in);
is_fade.setOutAnimation(this, R.anim.fade_out);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android ImageSwitc 白屏