Android 使用 java 开启关闭色调

Android tint on off with java

我定制了 imagebutton

可以设置图像 src 和选择的色调。

我想在单击按钮时切换原始图像并设置色调颜色 image

我试过了。(这不是完整的源代码,只是写点)

CustomImageButton.java

public class CustomImageButton extends LinearLayout {

  View view;
  ImageView imageView;
  private Drawable defaultDrawable;
  private Drawable tintDrawable;

  public CustomImageButton(Context context, AttributeSet attr){
    super(context, attr);

    args = context.obtainStyledAttributes(attr, R.styleable.CustomImageButton);
    init(context);
  }

  private void init(Context context) {
  view = View.inflate(context, R.layout.custom_image_button, this);
  imageView = view.findViewById(R.id.imvCustomButtonImg);

  getArgs();
  getDefaultValues();

  setSelect(isSelected);
}

private void getDefaultValues()
{
  defaultDrawable = getContext().getDrawable(imageSrc);
  tintDrawable = getContext().getDrawable(imageSrc);
  DrawableCompat.setTintList(tintDrawable, getContext().getColorStateList(selectedTintColorId));
}

  public void setTintColor()
  {
    if(isSelected == false) {
      imageView.setImageDrawable(defaultDrawable);
    }
    else
    {
      imageView.setImageDrawable(tintDrawable);
    }
  }

这是第一次使用时效果很好。

但重新创建后,activity,默认图像设置为色调颜色。

所以buttons如果我点击或不点击设置色调。

我猜 DrawableCompat.setTintList(tintDrawable, getContext().getColorStateList(selectedTintColorId)); 是覆盖应用程序的 src。

你有解决这个问题的办法吗?

您需要保存视图的状态,您可以覆盖自定义视图的 onSaveInstanceStateonRestoreInstanceState。我在这里创建了一个示例 https://gist.github.com/giaquino/092e37f9522e9436b912d2488c237a31

您还可以创建一个 ColorStateList 资源并将其设置为按钮的 android:tint/app:tint,而不是创建另一个可绘制对象。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#FF0000" android:state_selected="true" />
    <item android:color="@android:color/transparent" />
</selector>