渐变边框

99 阅读1分钟

渐变边框

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);

www.cnblogs.com/guanxinjing…