2017-06-02 51 views
1

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

这意味着:

  • 示出在黑色背景上的白色图标=>细,不需要图标背景
  • 在白色背景上shwoing黑边白色图标=>细,没有图标背景需要
  • 显示在白色背景上=>问题,我需要添加一个背景后面的图标,使用户可以看到该图标

任何想法如何做到这一点的白色图标?有效地,因为这将在对话框中的每个图标完成...

或者任何替代的想法来解决这个问题?

问题解决

比较对话框背景与从图标计算出的颜色=>如果不同的是,不画图标后面的背景,如果没有,绘制不同足够背景从图标

这怎么可以有效地完成?

回答

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

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