android如何实现不规则四边形背景


先上一张样图


真是一个奇怪的需求,一般来说,都是直接用图片背景来实现这个样式。

不过为了压缩apk的体积,也可以找一些方法用android自带的layer-list来实现。


首先这其实是2部分组成的layer-list,上面一层是倾斜的灰色长方体,下面一层是渐变的长方体


先实现下面一层,渐变长方体

<item>
        <shape android:shape="rectangle">
            <!-- rectangle表示为矩形 -->
            <!-- 渐变的颜色 -->
            <gradient
                android:angle="0"
                android:centerX="0.5"
                android:centerY="0"
                android:endColor="@color/weight_blue"
                android:startColor="@color/weight_green" />
        </shape>
    </item>

使用shape指定图形,使用gradient来实现渐变,很容易理解,从绿色开始到蓝色结束


接着定义一个灰色背景的长方体

<item>
            <shape android:shape="rectangle">
                <solid android:color="@color/main_bg" />
            </shape>
        </rotate>
    </item>

这样第二个长方体会覆盖在第一个长方体上,并且因为不是透明的,所以就完全看不见第一个长方体了


最后我们把这个长方体进行旋转,并且设置XY轴偏移

<rotate
            android:fromDegrees="105"
            android:pivotX="86%"
            android:pivotY="100%"
            android:toDegrees="45">

当pivotX设置50%时,表示在当前控件的左上角加上自己宽度的 50% (即自身宽度中心)作为起始点

这几个参数要针对需求具体调试


可以参考图解 Android 动画中 android:pivotX 和 android:pivotY 属性的含义