我有一个以layer-list作为源的ImageView。图层列表由一个图像和一个帧组成。该帧的负插入值为-4dp。这在Android 5和更高版本上运行得很好,但在任何Android 4版本上都不行(在4.3和4.4.2的实际设备上进行了测试)。
在Android 5和更高版本的设备上,框架在实际图像之外(框架宽度为4dp),但在Android 4设备上,框架在图像内部。
图层列表xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/image_id">
<bitmap
android:src="@drawable/checker_bmp"
android:antialias="true"/>
</item>
<item android:id="@+id/shadow">
<inset
android:antialias="true"
android:inset="-4dp">
<nine-patch android:src="@drawable/green_shadow"/>
</inset>
</item>
</layer-list>InsetDrawable从API版本1开始就存在。
我不能使用标准的android:src和android:background来处理图像和边框,因为我必须旋转图像,而背景又不能用ImageView旋转。
结果是:红色和黑色的棋盘是实际的图像。透明的绿色框架显示了xml在不同Android版本上的结果。就像Android 5+一样,底片应该会在棋盘周围放上绿色的边框。在Android 4中,它位于图像内部,就像被忽略了一样。如何在Android 4上实现正确的结果?

编辑:我发现android:inset只有在21级(Android5)才能使用。必须有一种方法在低于21的API水平上获得相同的结果…重要的是,图像必须能够缩放和旋转,并且框架是可绘制的九个补丁。
EDIT2:给图像视图一个正的嵌入,会得到相同的结果。这是我使用的代码:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/image_id">
<inset
android:antialias="true"
android:inset="4dp">
<bitmap
android:src="@drawable/checker_bmp"
android:antialias="true"/>
</inset>
</item>
<item android:id="@+id/shadow" >
<nine-patch android:src="@drawable/green_shadow"/>
</item>
</layer-list>在图像上设置4dp填充会使整个图像偏移4dp:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/canvas_image_layer_id" android:top="4dp" android:bottom="4dp" android:left="4dp" android:right="4dp">
<bitmap
android:src="@drawable/canvas_shadow"
android:antialias="true"/>
</item>
<item android:id="@+id/background_shadow" >
<nine-patch android:src="@drawable/canvas_shadow"/>
</item>
</layer-list>发布于 2018-02-23 06:41:19
与其使用负片嵌入,不如先将框架作为纯色,然后将图像作为正片嵌入其中。
https://stackoverflow.com/questions/48937852
复制相似问题