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。
你有解决这个问题的办法吗?
您需要保存视图的状态,您可以覆盖自定义视图的 onSaveInstanceState
和 onRestoreInstanceState
。我在这里创建了一个示例 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>
我定制了 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。
你有解决这个问题的办法吗?
您需要保存视图的状态,您可以覆盖自定义视图的 onSaveInstanceState
和 onRestoreInstanceState
。我在这里创建了一个示例 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>