在图层列表中剪切平铺位图的角

时间:2018-04-02 20:01:43

标签: android android-resources layer-list

我希望完成看起来像这里的底部的东西(对于所有四个角落,但我只有图像的底部向您展示):

enter image description here

到目前为止我所拥有的:

<?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>

然而,根据预览,每个角落都有一个 tiiiny 像素:

enter image description here

那么,我该如何剪辑这些角落?可见的中风不是它,实际上并不需要......

事情尝试了:

在项目中添加一个实体,与我想要的完全相反。可能有一个掩蔽技巧......

<?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>

enter image description here

瓷砖:

A simple tile

1 个答案:

答案 0 :(得分: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>
    
  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>
    
  3. 您需要微调此案例的偏移量。这个有点hacky,因为它缩小了tile内容。您可能希望在进行微调时使用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);