Android LayerDrawable.setDrawableByLayerId 不适用于 HTC Sensation(和其他?)

2024-05-12

我正在使用 LayerDrawable 在底层图像(索引 0)上构建一系列热点(索引 1+)。热点是根据用户界面交互添加的,并且它们的位置是动态的,因此我以编程方式完成所有这些操作,而不是使用 XML。作为进一步(可能不相关)的细节,我使用 Fragment 来保存 LayerDrawable,因为这是在 FragmentStatePagerAdapter 和 ViewPager 的上下文中。

问题是,当我尝试通过调用 setDrawableByLayerId 更改 LayerDrawable 中的 Drawable 来更新图像时,图像不会更改(尽管该方法返回 true,表明它找到了该图层)。

我怎样才能让它发挥作用?


在这里回答我自己的问题,希望对那里的人有用。我可以让它在我的 HTC Sensation 上工作的唯一方法是从头开始重新创建 LayerDrawable,并进行更改:

LayerDrawable oldLayerDrawable = (LayerDrawable) imageView.getDrawable();
Drawable[] layers = new Drawable[2];
layers[0] = oldLayerDrawable.getDrawable(0);
layers[1] = getResources().getDrawable(R.drawable.hotspot_dot);
LayerDrawable layerDrawable = new LayerDrawable(layers);
imageView.setImageDrawable(layerDrawable);

这并不漂亮,但这似乎可能是一个已知的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android LayerDrawable.setDrawableByLayerId 不适用于 HTC Sensation(和其他?) 的相关文章

随机推荐