java - Android:使屏幕 "flash"变白

标签 java android

我想让我的 android 屏幕暂时“闪烁”白色(仅一次)。它需要足够长,以便用户能够分辨出屏幕确实变白了。

用户将登陆一个屏幕,该屏幕将在 5 秒后闪烁白色,然后再次显示原始屏幕(可能从白色逐渐消失)。

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

最佳答案

  • 通过创建覆盖(match_parent 大小)ImageView 并将 android:src 设置为白色可绘制对象来添加前景。
  • 将此 View 的可见性设置为 android:visibility="gone"
  • 当你想显示白色闪光时,我推荐一个动画来淡化白色闪光并显示它。

这是一个基本动画,它将在 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);
}

如果您正在使用框架布局并将不透明度从 0(透明)切换到 1(不透明),您可以不创建新 View ,而是使用 android:foreground 属性。 (注意。对于第一种方法,当 flash View 可见时,您将无法与其下的任何元素进行交互,这使得它成为比具有前景属性的 FrameLayout 更好的选择)。然而,这更难实现。

关于java - Android:使屏幕 "flash"变白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23960221/

相关文章:

android zxing 集成

java - 从 Android Intent 打开图库应用

java - JSON 字符串到对象的映射

java - Hibernate:在 Weblogic 中配置数据源后出现错误 "org.hibernate.exception.GenericJDBCException: could not update"

java - 如何将 UUID 插入 RAW(16) 列

java - 如何让Java进程使用多个CPU核心

android - 这是一个测试订单,您不会被收取费用

android - E/蓝牙适配器(883) : Bluetooth binder is null

java - Android 中的欢迎 Activity

java - Android WebView 和 Word Online