渐变边框
fun createDrawable(colors: IntArray, radius: Float, strokeWidth: Float): ShapeDrawable {
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)
val shaderFactory = object : ShapeDrawable.ShaderFactory() {
override fun resize(width: Int, height: Int): Shader {
return LinearGradient(
0f,
0f,
width.toFloat(),
height.toFloat(),
colors,
null,
Shader.TileMode.CLAMP
)
}
}
return ShapeDrawable(rr).apply {
setShaderFactory(shaderFactory)
}
}
RoundRectShape
RectF distanceRectF = new RectF(10, 10, 10, 10); //内部矩形与外部矩形的距离
float[] insideRound = {10, 10, 10, 10, 10, 10, 10, 10}; //内部矩形的8个圆角半径值
ShapeDrawable shapeDrawable = new ShapeDrawable(new RoundRectShape(externalRound, distanceRectF, insideRound));
shapeDrawable.getPaint().setColor(Color.BLACK);
Rect rect = new Rect();
rect.top = 0;
rect.left = 0;
rect.bottom = 50;
rect.right = 50;
shapeDrawable.setBounds(rect);
mTextView.setBackground(shapeDrawable);