- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在 xml 中构建一个 LayerDrawable,其中上层有时会完全遮盖下层。为了使下层更小,我使用 InsetDrawable 包裹另一个可绘制对象,使其小于 View 的完整尺寸。然而,我出乎意料地发现,放置在包含插图的图层顶部的任何图层也应用了插图。我找不到支持此行为的文档,并且很困惑为什么会这样。
在下面的示例中,我制作了一个包含 3 层的 LayerDrawable。底层和顶层包含椭圆形的可绘制对象,旨在占据整个 View 。中间层是 InsetDrawable 内部的矩形可绘制对象。代码如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="oval" >
<solid android:color="#00ff00" />
</shape>
</item>
<item>
<inset
android:insetBottom="4dp"
android:insetLeft="4dp"
android:insetRight="4dp"
android:insetTop="4dp" >
<shape android:shape="rectangle" >
<solid android:color="#ff0000" />
</shape>
</inset>
</item>
<item>
<shape android:shape="oval" >
<solid android:color="#0000ff" />
</shape>
</item>
</layer-list>
在我的 View 中调用 setBackgroundDrawable(getResources().getDrawable(drawableId));
会产生一个绿色椭圆,按预期填充整个 View ,并按预期插入 4dp 的红色矩形,但蓝色顶层的椭圆也是内嵌 4dp 并完全绘制在红色矩形的边界内。
我希望蓝色椭圆完全遮住绿色椭圆和大部分红色矩形,但它嵌入了红色矩形内。有什么方法可以让蓝色圆圈填满 View 并保持在顶部?
最佳答案
我也没有看到它在哪里记录,但是 LayerDrawable
中的填充是累积的。也就是说,一层的填充会影响所有更高层的边界。这是来自 the source for LayerDrawable
:
@Override
protected void onBoundsChange(Rect bounds) {
final ChildDrawable[] array = mLayerState.mChildren;
final int N = mLayerState.mNum;
int padL=0, padT=0, padR=0, padB=0;
for (int i=0; i<N; i++) {
final ChildDrawable r = array[i];
r.mDrawable.setBounds(bounds.left + r.mInsetL + padL,
bounds.top + r.mInsetT + padT,
bounds.right - r.mInsetR - padR,
bounds.bottom - r.mInsetB - padB);
padL += mPaddingL[i];
padR += mPaddingR[i];
padT += mPaddingT[i];
padB += mPaddingB[i];
}
}
(LayerDrawable.getPadding(Rect)
遵循相同的逻辑。)由于 InsetDrawable
使用其插图作为填充(如 documented ),这解释了您的行为看见了。
我认为这是一个糟糕的设计决定,但恐怕你有点坚持下去了。我不认为它可以被覆盖。
关于android - 绘制包含 InsetDrawable 的层时意外的 LayerDrawable 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9029270/
我定义了一个 InsetDrawable,我希望能够在运行时调整 inset 的值,而无需重新分配另一个 drawable。 这可能吗?或者唯一的方法是重新创建 InsetDrawable? 最佳答案
您好,我尝试自定义一个搜索栏。 这是我的问题: 主.xml ... ... @drawable 中的 sb2.xml 一切正常,但 sb_progress 的位
我正在尝试在 xml 中构建一个 LayerDrawable,其中上层有时会完全遮盖下层。为了使下层更小,我使用 InsetDrawable 包裹另一个可绘制对象,使其小于 View 的完整尺寸。然而
我是一名优秀的程序员,十分优秀!