Android:让屏幕“闪烁”白色

我想暂时让我的安卓屏幕“闪烁”白色(只有一次)。 它需要足够长,以便用户能够告诉屏幕确实变成了白色。

用户将降落在屏幕上,该屏幕将在5秒后闪烁白色,然后再次显示原始屏幕(可能从白色褪色)。

最好的方法是什么? 现在我正在创建一个占据整个屏幕并以编程方式显示和隐藏它的矩形。

  • 通过创建一个覆盖( match_parent大小)ImageView并将android:src设置为白色drawable来添加前景。
  • 将此视图的可见性设置为android:visibility =“gone”
  • 当你想要显示白色闪光时,我建议使用动画来淡化白色闪光并显示它。

这是一个基本的动画,它会淡化ImageView的drawable。 淡出将与此相反。

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属性而不是创建新视图。 (注意:对于第一种方法,当Flash视图可见时,您将无法与其下的任何元素进行交互,这使得它比具有前景属性的FrameLayout更好。) 然而,这更难实施。