android设置一层图层绘制的边界

时间:2012-07-30 07:08:44

标签: android android-widget drawable bounds

我正在尝试使用LayerDrawable作为自定义UI小部件,并且使用与其他图层不同的边界绘制一个图层,但它似乎不起作用。基本上,我的代码执行此操作:

int left, top, right, bottom;
/*... do some math ... */
Drawable d = mDrawable.findDrawableByLayerId(R.id.some_specific_layer);
d.setBounds(left, top, right, bottom);

同时,xml看起来像这样:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<item>
    <shape android:shape="rectangle" >
        <solid android:color="#ff999999" />
    </shape>
</item>
<item
    android:id="@id/some_specific_layer"
    android:drawable="@drawable/some_drawable"/>

理想情况下,我会在灰色矩形上看到some_drawable,从后面显示灰色量取决于边界计算的结果。但我从来没有看到任何灰色层,它似乎是因为它的界限也是以某种方式设置的。

修改

以下是期望与预期结果的视觉效果: enter image description here

顶部图像是我想要实现的;灰色对应于第一层,渐变对应于具有预定义id的第二层。实际结果从未显示灰色。

有没有人知道是否可以设置LayerDrawable的一层边界而不影响其他图层?

2 个答案:

答案 0 :(得分:1)

我收到了Android开发者Google小组的一些回复。从本质上讲,使用LayerDrawable没有可靠的方法来执行此操作,因为它管理所有孩子Drawables的状态。我采用了一种方法,使用两个单独的drawables,结果令人满意。以下是供参考的讨论主题:

https://groups.google.com/d/topic/android-developers/fUxtJstdkBM/discussion

答案 1 :(得分:0)

我已经设法使用LayerDrawable:

对此代码执行类似的操作
// create first shape
ShapeDrawable shape1 = new ShapeDrawable(new OvalShape());
shape1.getPaint().setColor(0xFFFFFF00);
shape1.setIntrinsicWidth(50);
shape1.setIntrinsicHeight(50);
shape1.invalidateSelf();

// create second shape
ShapeDrawable shape2 = new ShapeDrawable(new OvalShape());
shape2.getPaint().setColor(0xFFFFB400);
shape2.setIntrinsicWidth(20);
shape2.setIntrinsicHeight(50);
shape2.invalidateSelf();

// create layerDrawable (layer-list in xml)
// it containt our 2 shapes and the order in wich they will be drawn (shape2 is on top).
LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{shape1, shape2});

// ajust position shape1 and shape2
layerDrawable.setLayerInset(0, 0,0,0,0);
layerDrawable.setLayerInset(1, 15,0,15,0);

结果是(在黑色背景上):