Android UI動態設置帶有Stroke漸變色背景Drawable
摘要
每天一個UI小技巧,提高開發效率 UI開發中繁瑣的drawable xml開發,不同的view背景樣式一致,卻因為部分設計區別,就要重新寫一套新的xml drawable,寫還是不寫?寫的越多冗餘代碼越多,就因為改瞭一點小小的高度?
代碼中設置Stroke漸變
- 實際效果如下
代碼實現
class StrokeGradientLRDrawable(colors: IntArray, radius: Float, strokeWidth: Float) : ShapeDrawable() { init { // 外部矩形弧度 val outerR = floatArrayOf(radius, radius, radius, radius, radius, radius, radius, radius) // 內部矩形與外部矩形的距離 val inset = RectF(strokeWidth, strokeWidth, strokeWidth, strokeWidth) // 內部矩形弧度 val innerRadius = radius - strokeWidth val innerRadii = floatArrayOf(innerRadius, innerRadius, innerRadius, innerRadius, innerRadius, innerRadius, innerRadius, innerRadius) val rr = RoundRectShape(outerR, inset, innerRadii) shape = rr shaderFactory = object : ShaderFactory() { override fun resize(width: Int, height: Int): Shader { return LinearGradient(0f, 0f, width.toFloat(), 0f, colors, null, Shader.TileMode.CLAMP) } } } }
Drawable很簡單,三個參數。
漸變的顏色數組; 圓角半徑; Stroke的線條寬度
如何使用
- 如果達到圖一的效果,即半徑恰好為高度的一半,隻需要把radius設置為一個更大的值即可。給個1000就行瞭
view.background = StrokeGradientLRDrawable(intArrayOf(Color.RED, Color.BLUE), 1000f, 5f)
- 普通的圓角就設置值就好瞭
view.background = StrokeGradientLRDrawable(intArrayOf(Color.RED, Color.BLUE), 50f, 5f)
以上就是Android UI動態設置帶有Stroke漸變色背景Drawable的詳細內容,更多關於Android UI Stroke漸變色背景的資料請關註WalkonNet其它相關文章!