我正在尝试在drawable上应用滤镜,具体取决于用户在首选项中选择的原色。这是我正在使用的一段代码。
getResources().getDrawable(R.drawable.ic_batman_1)
.setColorFilter(ColorHelper.getPrimaryColor(), PorterDuff.Mode.OVERLAY);
问题是,有时候,这段代码不会改变drawable的滤色器。我已将此代码放在我的活动(主要活动)onCreate和onResume方法中。
因此,只要应用程序启动,我希望将此滤镜应用于该drawable,但有时它不会发生。我也注意到这个问题不是在高端手机(高速处理器,更多RAM)上发生,而是仅在低端手机上发生。
但是,如果我浏览任何其他活动并返回主要活动,则应用颜色过滤器。调试代码和setColorFilter在使用适当的颜色参数启动时被调用,但由于某种原因它没有得到应用。任何形式的帮助都表示赞赏。
请不要低估这个问题,如果你认为这是一个愚蠢的问题,只需评论,我会把问题记下来。我因为提出问题而被禁止在SO上。
答案 0 :(得分:3)
你试试Drawable.mutate();像这样的财产,
Drawable drawable = ContextCompat.getDrawable(context, resource).mutate();
drawable.setColorFilter(ColorHelper.getPrimaryColor(), PorterDuff.Mode. OVERLAY);
/** * Make this drawable mutable. This operation cannot be reversed. A mutable * drawable is guaranteed to not share its state with any other drawable. * This is especially useful when you need to modify properties of drawables * loaded from resources. By default, all drawables instances loaded from * the same resource share a common state; if you modify the state of one * instance, all the other instances will receive the same modification. * * Calling this method on a mutable Drawable will have no effect. * * @return This drawable. * @see ConstantState * @see #getConstantState() */ public @NonNull Drawable mutate() { return this; }