我正在使用LayerDrawable在底层图像(索引0)上构建一系列热点(索引1+)。热点是基于用户界面交互添加的,它们的位置是动态的,所以我以编程方式而不是使用XML来完成所有这些。作为进一步(可能不相关)的细节,我使用Fragment来保存LayerDrawable,因为这是在FragmentStatePagerAdapter和ViewPager的上下文中。
问题在于,当我尝试通过调用SetDrawableByLayerId更改LayerDrawable中的Drawable来更新图像时,图像不会更改(尽管方法返回true,表明它找到了图层)。
我怎样才能让它发挥作用?
答案 0 :(得分:4)
在这里回答我自己的问题,希望对那里的人有用。我能用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);
它不漂亮,但似乎这可能是一个已知的问题。
答案 1 :(得分:1)
newdrawable.setBounds(mLayerDrawable.findDrawableByLayerId(R.id.image_source).getBounds());
mLayerDrawable.setDrawableByLayerId(R.id.image_source, drawable);
mLayerDrawable.invalidateSelf();
答案 2 :(得分:0)
事情是"索引"和" id"是不同的属性。
默认情况下,任何图层的layerId始终等于-1。但您可以通过调用setId(index, id)
明确设置,然后调用setDrawableByLayerId(id, Drawable)