Android GradientDrawable--shape的

2022-07-13  本文已影响0人  逃离_102

说明

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

就说到这了,有什么不对的地方,欢迎指正,有什么没说全的,欢迎讨论留言

上一篇 下一篇

猜你喜欢

热点阅读