gpt4 book ai didi

android - Android 上未清除的 StateListDrawable 行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:57:43 24 4
gpt4 key购买 nike

当我尝试使用StateListDrawable时,我有一个很奇怪的现象:

我有一个扩展 ImageView 的 View ,我在其构造函数中使用了 StateListDrawable。我有 2 个代码 fragment 来展示我的问题。第一个:

public class MyView extends ImageView{  
Resources r = getResources();
Drawable filteredDrawable = r.getDrawable(R.drawable.smallsale);
filteredDrawable.setColorFilter(new LightingColorFilter(Color.RED, 1));
setImageDrawable(filteredDrawable);
}

第二个:

public class MyView extends ImageView{
Resources r = getResources();
Drawable filteredDrawable = r.getDrawable(R.drawable.smallsale);

filteredDrawable.setColorFilter(new LightingColorFilter(Color.RED, 1));

StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed}, filteredDrawable);
states.addState(new int[] {android.R.attr.state_focused}, filteredDrawable);
states.addState(new int[] {}, r.getDrawable(R.drawable.smallsale));

//Notice I do not use 'states' at all...
setImageDrawable(filteredDrawable);

(我知道这段代码没有多大意义 - 我想简化问题以使问题更清楚)。问题是在第一个 sinppet 上一切正常——我在可绘制对象上设置了一个滤色器并显示了它。但是在第二个 fragment 中,StateListDrawable 实例以某种方式影响过滤器,并且显示了 original 可绘制对象,即使我从未将它连接到 ImageView 通过调用 setImageDrawable(states)

谁能给我解释一下这是怎么回事?我的目标是将 StateListDrawable 与相同的 drawable 用于不同的状态,如下所示:

StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed}, filteredDrawable);
states.addState(new int[] {android.R.attr.state_focused}, filteredDrawable);
states.addState(new int[] {}, r.getDrawable(R.drawable.smallsale));
setImageDrawable(states);

(我需要通过代码来完成,因为我的可绘制对象应该从网络动态加载,而不是作为资源)

最佳答案

好的。我找到了 this post

事实证明 StateListDrawables 出于某种原因丢失了过滤器...我采用了 SnoK 的解决方案,它非常适合我。

我不知道为什么谷歌不认为它应该作为副作用在文档中注明......

关于android - Android 上未清除的 StateListDrawable 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13459859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com