我想让我的安卓屏幕暂时“闪”成白色(只有一次)。需要足够长,以便用户能够确定屏幕确实变成了白色。
用户将会落在一个屏幕上,在5秒后这个屏幕会闪白,然后再次显示原始屏幕(可能从白色淡出)。
怎么做最好呢?目前我正在创建一个占据整个屏幕的矩形,并通过编程来显示和隐藏它。
这是一种基本的动画,可以淡入ImageView的可绘制项。淡出将是其相反操作。
public static void FadeIn(final ImageView v,
final int begin_alpha, final int end_alpha, int time,
final boolean toggleVisibility) {
if (Integer.valueOf(android.os.Build.VERSION.SDK_INT) >= android.os.Build.VERSION_CODES.JELLY_BEAN)
v.setImageAlpha(begin_alpha);
else
v.setAlpha(begin_alpha);
if (toggleVisibility) {
if (v.getVisibility() == View.GONE)
v.setVisibility(View.VISIBLE);
else
v.setVisibility(View.GONE);
}
Animation a = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t) {
if (interpolatedTime == 1) {
if (Integer.valueOf(android.os.Build.VERSION.SDK_INT) >= android.os.Build.VERSION_CODES.JELLY_BEAN)
v.setImageAlpha(end_alpha);
else
v.setAlpha(end_alpha);
if (toggleVisibility) {
if (v.getVisibility() == View.GONE)
v.setVisibility(View.VISIBLE);
else
v.setVisibility(View.GONE);
}
} else {
int new_alpha = (int) (begin_alpha + (interpolatedTime * (end_alpha - begin_alpha)));
if (Integer.valueOf(android.os.Build.VERSION.SDK_INT) >= android.os.Build.VERSION_CODES.JELLY_BEAN)
v.setImageAlpha(new_alpha);
else
v.setAlpha(new_alpha);
v.requestLayout();
}
}
@Override
public boolean willChangeBounds() {
return true;
}
};
a.setDuration(time);
v.startAnimation(a);
}
如果您正在使用FrameLayout并且需要切换透明度从0(透明)到1(不透明),您可以使用android:foreground属性,而无需创建新的视图。(请注意,对于第一种方法,当闪光视图可见时,您将无法与其下方的任何元素交互,因此这比具有前景属性的FrameLayout更好)。 不过,这种方法实现起来较为困难。