Android 使用 LinearGradient 实现对角线颜色渐变
package com.demo.lib.view
import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.util.Log
import android.widget.FrameLayout
import com.okay.lib.R
/**
* Create by shadow
* 负责给view或是viewG添加渐变背景色
*
* //Avoid object allocations during draw/layout operations (preallocate and reuse instead),意为避免在绘制/布局中去实例化对象。
@SuppressLint("DrawAllocation")
*/
class GradientViewGroup @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {
private val paint: Paint = Paint()
private val rect :RectF = RectF()
/**
* 圆角
*/
private val radius = 10F
private var linearGradient: LinearGradient? = null
init {
paint.isAntiAlias = true
Log.d("GradientViewGroup", "measuredWidth = $measuredWidth")
}
override fun dispatchDraw(canvas: Canvas) {
super.dispatchDraw(canvas)
linearGradient = LinearGradient(
0F,
0F,
measuredWidth.toFloat(),
measuredHeight.toFloat(),
resources.getColor(R.color.colorAccent),
resources.getColor(R.color.colorPrimary),
Shader.TileMode.CLAMP
)
rect.set(0F, 0F, measuredWidth.toFloat(), measuredHeight.toFloat())
paint.shader = linearGradient
Log.d("GradientViewGroup", "measuredWidth = $measuredWidth")
// canvas.drawRect(rect, paint)
canvas.drawRoundRect(rect,radius,radius,paint)
}
}
网友评论