2013-03-12 70 views
2

我使用LayerDrawable在基础图像(索引0)上构建一系列热点(索引1+)。热点是基于用户界面交互添加的,并且它们的位置是动态的,所以我以编程方式完成所有这些工作,而不是使用XML。作为更多(可能不相关)的细节,我使用片段来保存LayerDrawable,因为这是在FragmentStatePagerAdapter和ViewPager的上下文中。Android LayerDrawable.setDrawableByLayerId不工作在HTC Sensation(和其他?)

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

我该如何得到这个工作?

回答

3

在这里回答我自己的问题,希望对那里的某个人有用。我能得到这个在我的HTC感觉工作的唯一方法是从头开始重新创建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); 

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

0

的事情是, “指数” 和 “ID” 是不同的属性。 默认情况下,任何图层的layerId总是等于-1。但您可以通过致电setId(index, id)明确设置,然后致电setDrawableByLayerId(id, Drawable)

相关问题