对话框dismiss时ImageButton颜色滤镜意外复位问题咨询
问题成因
- 前景滤镜被重置:你在XML中为ImageButton配置了
android:tint属性,对话框dismiss时会触发Activity窗口重绘(刷新被对话框遮挡的区域),AppCompat框架在View重绘流程中,会自动将XML预设的tint值重新应用到前景src资源上。你通过penColorButton.setColorFilter()仅修改了当前src Drawable的临时滤镜,没有更新View本身存储的tint配置,重绘时就会被原始tint值覆盖,导致设置失效。 - 背景滤镜保留且应用到其他按钮:Android对同一Drawable资源的所有引用默认共享常量状态(ConstantState),如果多个控件都使用了
@drawable/some_image作为背景,直接给背景Drawable设置滤镜时,修改会同步到所有共享该资源的View上。你没有调用mutate()为当前View的背景Drawable创建独立状态副本,所以修改会影响其他同资源引用的按钮,且不会随重绘重置。
修复方案
- 前景色修改直接更新View的tint配置,避免重绘被覆盖:
penColorButton.setImageTintList(ColorStateList.valueOf(0xffff0000));
- 背景滤镜设置前调用
mutate()创建独立Drawable副本,避免影响其他控件:
penColorButton.getBackground().mutate().setColorFilter(0xffff0000, android.graphics.PorterDuff.Mode.MULTIPLY);
内容的提问来源于stack exchange,提问作者LGT
相关产品推荐
相关产品推荐

