首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android 4不接受负值插入

Android 4不接受负值插入
EN

Stack Overflow用户
提问于 2018-02-23 05:52:18
回答 1查看 410关注 0票数 0

我有一个以layer-list作为源的ImageView。图层列表由一个图像和一个帧组成。该帧的负插入值为-4dp。这在Android 5和更高版本上运行得很好,但在任何Android 4版本上都不行(在4.3和4.4.2的实际设备上进行了测试)。

在Android 5和更高版本的设备上,框架在实际图像之外(框架宽度为4dp),但在Android 4设备上,框架在图像内部。

图层列表xml:

代码语言:javascript
复制
<?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:给图像视图一个正的嵌入,会得到相同的结果。这是我使用的代码:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2018-02-23 06:41:19

与其使用负片嵌入,不如先将框架作为纯色,然后将图像作为正片嵌入其中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48937852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档