检测图像在背景上是否可见

时间:2017-06-02 06:45:43

标签: android image colors

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

这意味着:

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

任何想法如何做到这一点?有效地为对话框中的每个图标做这个...

或者解决问题的其他任何想法?

要解决的问题

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

如何有效地完成这项工作?

1 个答案:

答案 0 :(得分:0)

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

 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();
    }
}

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