所以我有两个不同Drawables的,我需要在运行时合并并得到一个Drawable。我希望第一个Drawable在顶部,另一个在底部。我遇到了LayerDrawable,它看起来正是我需要的,但我在尝试安排Drawables.
所以我有一个ImageButton48x48 的尺寸dp,这就是决赛Drawable的去向。第一个Drawable是加号按钮 (20x20 dp),第二个是dp加号按钮下方的一个小点 (4x4 )。
加号按钮Drawable是使用字体字形加载的。我正在Drawable使用这个 xml 片段创建点按钮:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="@color/white_40"/>
<size
android:width="4dp"
android:height="4dp"/>
</shape>
我的第一种方法是将两者都添加Drawables到 中LayerDrawable,但是当我这样做时,xml 中指定的点的宽度/高度属性将被忽略,并且它会延伸以覆盖加号图标。
LayerDrawable finalDrawable = new LayerDrawable(new Drawable[] {plusIcon, dotIcon});
我尝试的第二种方法是使用setLayerInsetto try and position the two Drawables.
LayerDrawable finalDrawable = new LayerDrawable(new Drawable[] {plusIcon, dotIcon});
finalDrawable.setLayerInset(0, 0, 0, 0, 0);
finalDrawable.setLayerInset(1, dp(22), dp(44), dp(22), 0);
上面的代码片段最终将点放置在正确的位置,但它也开始影响加号按钮的位置和大小,最终看起来像这样:

但我真正想要的是在中间有加号按钮,在ImageButton它下面有加号图标。有谁知道我哪里出错了,我怎样才能正确定位两个drawable?
PS:我的应用程序支持 API 15+,所以我不能使用来自LayerDrawableAPI 的一堆方法,比如setLayerGravity`setPaddingMode 等。

