1. 程式人生 > >用Kotlin封裝一個Android中View的BackgroundDrawableBuilder

用Kotlin封裝一個Android中View的BackgroundDrawableBuilder

一個自定義的TextView,對background的設定進行了簡單封裝。同時包含了一個ShapeBuilder,可以用於設定給所有View新增背景

簡化View的background建立,支援在xml和程式碼中設定backgroundDrawable, 程式碼中支援鏈式呼叫,或者DSL建立

支援在xml和程式碼中設定View的background  

歡迎star?

先上效果圖:

xml設定方式:

   <com.unicorn.androidshapebuilder.MyTextView
            android:text="textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="20dp"

            app:soildBac="@android:color/holo_green_light"
            app:strokeColor="@android:color/holo_red_light"
            app:strokeWidth="2dp"

            app:radiusBottomLeft="15dp"
            app:radiusBottomRight="2dp"
            app:radiusTopLeft="15dp"
            app:radiusTopRight="8dp"
            android:id="@+id/textView5"/>

程式碼設定方式有多種,可以選擇自己喜歡的方式來建立:

        /**
         * 鏈式呼叫方式定義物件
         */
        val shapeBuilder1 = SuperBackgroundDrawable().radius(35f).stroke(5, Color.BLACK).solid(Color.RED)

        /**
         * 使用標準庫函式方式定義物件
         */
        val shapeBuilder2 = SuperBackgroundDrawable().apply {
            radius(10000f)
            stroke(5, Color.BLACK)
            solid(Color.YELLOW)
        }

        /**
         * DSL方式定義物件
         */
        val shapeBuilder3 = shapeDSLBuilder {
            radius = 35f
            strokeWidth = 5
            strokeColor = Color.BLACK
            solidColor = Color.LTGRAY
        }


        /**
         * 工具類方式定義物件
         */
        val shapeBuilder4 = shapeBuilder {
            radius(35f)
            solid(Color.GREEN)
        }

        /**
         * DSL方式定義物件
         */
        val shapeBuilder5 = shapeDSLBuilder {
            topLeftRadius = 35f
            topRightRadius = 0f
            botLeftRadius = 35f
            botRightRadius = 0f
            strokeWidth = 5
            strokeColor = Color.BLACK
            solidColor = Color.BLUE
        }

        textView0.background = shapeBuilder1
        textView1.background = shapeBuilder2
        textView2.background = shapeBuilder3
        textView3.background = shapeBuilder4
        textView4.background = shapeBuilder5

後期可以考慮加入layerlist支援,感興趣的同學可以直接在我的原始碼基礎上新增,可以參考原作者專案,其中包含了更多的功能。