说明
xml形式的shape背景设置,这个估计大家都用得很多。但是有的时候单单靠shape,是满足不了UI需求的,很多时候会根据不同场景有些微弱的变化,每个变化都枚举一个xml文件,这样就非常麻烦,这个时候GradientDrawable就可以很好的解决我们的问题。
GradientDrawable是shape的动态实现,利用GradientDrawable也可以创建出各种形状背景,满足代码运行中的背景修改。虽然Android还提供了一个ShapeDrawable,但它的实现效果远不如GradientDrawable,所以这里就不做过多讨论了。
GradientDrawable常用api
根据Android 源码,大体如下:
1,setShape(设置形状类型) ,包括RECTANGLE(矩形), OVAL(椭圆), LINE(线条), RING(环形);
2,setGradientType(设置此绘图工具使用的渐变类型),包括LINEAR_GRADIENT(线性,默认), RADIAL_GRADIENT(圆形), SWEEP_GRADIENT(扫描);
3,setStroke(设置边框,可以设置宽度,颜色,虚线等等属性);
4,setCornerRadius(设置圆角,统一圆角),getCornerRadii(4个角单独设置);
5,setGradientCenter(设置渐变的中心点);
6,setOrientation(设置渐变方向),包括TOP_BOTTOM,TR_BL,RIGHT_LEFT,BR_TL,BOTTOM_TOP,BL_TR,LEFT_RIGHT,TL_BR;
7,setColor,setColors(整体色,渐变颜色值);
8,setAlpha(透明度);
这些就是常用的了,当然还有别的,可自行看源码。
使用
GradientDrawable一般有2种用法:1,修改现有的shape;2,创建新shape;
修改现有的shape示例
//xml文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="4dp"/>
<stroke android:width="1dp"
android:color="#FF00FF"/>
<gradient android:startColor="#ffffff"
android:endColor="#ff0000" />
</shape>
//布局部分
<FrameLayout
android:id="@+id/fl"
android:layout_width="200dp"
android:layout_height="100dp"
android:background="@drawable/bg_test"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="MissingConstraints" />
//代码部分
val gradientDrawable = binding.fl.background as GradientDrawable
gradientDrawable.colors = intArrayOf(Color.RED, Color.BLUE)
binding.fl.background = gradientDrawable
创建新shape示例
//更多其他尝试,按api来
val gradientDrawable = GradientDrawable()
gradientDrawable.shape = GradientDrawable.RECTANGLE
gradientDrawable.gradientType = GradientDrawable.LINEAR_GRADIENT
gradientDrawable.colors = intArrayOf(Color.RED, Color.BLUE)
gradientDrawable.cornerRadius = 6f
binding.fl.background = gradientDrawable








网友评论