图层列表中平铺位图的剪辑角

MPe*_*ier 5 android android-resources layer-list

我希望完成一些看起来像这里底部的操作(对于所有四个角,但是我只显示图像的底部):

在此处输入图片说明

到目前为止,我有:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap android:src="@drawable/orange_tile"
            android:tileMode="repeat"
            android:dither="true"
            android:gravity="center" />
    </item>
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="2dp"/>
            <stroke android:color="@color/white" android:width="0.5dp" />
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

然而,这给了我一个tiiiny在每个角落像素,按预览:

在此处输入图片说明

那么,我该如何抓住那些角落?可见的笔触不是它,不是实际需要的...


尝试过的事情:

将固体添加到项目中可以得到与我想要的完全相反的效果。可能有掩盖技巧...

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap android:src="@drawable/orange_tile"
            android:tileMode="repeat"
            android:dither="true"
            android:gravity="center" />
    </item>
    <item>
        <shape android:shape="rectangle">
            <color android:color="@color/white" />
            <corners android:radius="2dp"/>
            <stroke android:color="@color/white" android:width="0.5dp" />
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


磁贴:

一个简单的瓷砖

Tpo*_*6oH 2

我可以想到几个选择。

  1. 只需再添加一个背景矩形来隐藏角落:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    
    <item>
        <bitmap android:src="@drawable/orange_tile"
            android:tileMode="repeat"
            android:dither="true"
            android:gravity="center" />
    </item>
    
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="2dp"/>
            <stroke android:color="@color/white" android:width="0.5dp"/>
        </shape>
    </item>
    
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="0dp"/>
            <stroke android:color="@color/white" android:width="0.5dp"/>
        </shape>
    </item>
    
    </layer-list>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您可以将角矩形移出视图并使其更大:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    
    <item>
        <bitmap android:src="@drawable/icon_bg"
            android:tileMode="repeat"
            android:dither="true"
            android:gravity="center" />
    </item>
    
    <item android:top="-1.5dp" android:bottom="-1.5dp"
        android:left="-1.5dp" android:right="-1.5dp"
        >
        <shape android:shape="rectangle">
            <corners android:radius="2dp"/>
            <stroke android:color="@color/white" android:width="1.5dp"/>
        </shape>
    </item>
    
    </layer-list>
    
    Run Code Online (Sandbox Code Playgroud)

在这种情况下,您需要微调偏移量。这个有点hacky,因为它缩小了图块内容。您可能希望在微调时使用android:scaleX="float"和来缩放图像。android:scaleY="float"

  1. 如果您愿意接受用于获取圆角的代码解决方案,您也可以尝试RoundedBitmapDrawable类。

    float cornerRadius = 2f * Resources.getSystem().getDisplayMetrics().density;    
    
    Bitmap tileBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.orange_tile);
    RoundedBitmapDrawable roundedTileDrawable = 
        RoundedBitmapDrawableFactory.create(getResources(), tileBitmap);
    
    roundedTileDrawable.setCornerRadius(cornerRadius);
    
    Run Code Online (Sandbox Code Playgroud)