【问题标题】:Detect if image is visible on background检测图像是否在背景上可见
【发布时间】:2017-06-02 06:45:43
【问题描述】:

我有一个对话框并在其中显示图标包的图标。根据我的应用主题和我想要动态决定的图标颜色,是否需要在背景上显示图标(取决于图标是否在对话框背景上可见)。

这意味着:

  • 在黑色背景上显示白色图标 => 很好,不需要图标背景
  • 在白色背景上显示带有黑色边框的白色图标 => 很好,不需要图标背景
  • 在白色背景上显示白色图标 => 问题,我需要在图标后面添加背景,以便用户可以看到图标

任何想法如何做到这一点?高效地为对话框中的每个图标执行此操作...

或者有什么解决问题的替代方案?

要解决的问题

将对话框背景与从图标计算的颜色进行比较 => 如果差异足够大,则不要在图标后面绘制背景,否则,请绘制与图标足够不同的背景

如何有效地做到这一点?

【问题讨论】:

    标签: android image colors


    【解决方案1】:

    您可以做一个显示对话框的通用函数。在函数的参数中,您可以传递上下文、图像和背景颜色本身。将其设置为单例并从要显示对话框的位置调用它。调用函数很容易。我正在附加一个带有监听器的对话框。

     public void showErrorDialogWithListener(Activity activity, String message, final View.OnClickListener onClickListener) {
        try {
            try {
                if (errorDialog != null && errorDialog.isShowing()) {
                    errorDialog.dismiss();
                }
            } catch (Exception e) {
    
            }
    
            errorDialog = new Dialog(activity, R.style.DialogTheme);
            errorDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            errorDialog.getWindow().getAttributes().windowAnimations = R.style.Animations_LoadingDialogFade;
            errorDialog.setContentView(R.layout.dialog_error);
    
            WindowManager.LayoutParams layoutParams = errorDialog.getWindow().getAttributes();
            errorDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            layoutParams.gravity = Gravity.CENTER;
            layoutParams.dimAmount = Constants.dialogDimAmount;
            errorDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
            errorDialog.getWindow().setAttributes(layoutParams);
            errorDialog.setCancelable(true);
            errorDialog.setCanceledOnTouchOutside(true);
            LinearLayout mParentRl = (LinearLayout) errorDialog.findViewById(R.id.parentRl);
            BaseActivity.overrideFonts(activity, mParentRl);
            Button mBtnOk = (Button) errorDialog.findViewById(R.id.btnOk);
            TextView messageTv = (TextView) errorDialog.findViewById(R.id.messageTv);
            messageTv.setText(message);
            mBtnOk.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    onClickListener.onClick(view);
                    errorDialog.dismiss();
                }
            });
    
    
            errorDialog.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    这是一个只有一个按钮的对话框。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-10
      • 2013-02-25
      • 1970-01-01
      • 2016-07-28
      • 2012-03-31
      • 2012-02-07
      • 1970-01-01
      • 2014-04-03
      相关资源
      最近更新 更多