@@ -16,9 +16,15 @@ import android.text.method.LinkMovementMethod
1616import android.text.style.ReplacementSpan
1717import android.text.style.StrikethroughSpan
1818import android.text.style.UnderlineSpan
19+ import android.view.Gravity
1920import android.view.View
21+ import android.view.ViewGroup
22+ import android.widget.FrameLayout
23+ import android.widget.RelativeLayout
2024import android.widget.TextView
2125import androidx.annotation.ColorInt
26+ import com.google.android.material.imageview.ShapeableImageView
27+ import com.google.android.material.shape.ShapeAppearanceModel
2228import com.view.text.annotation.Align
2329import com.view.text.config.LinkType
2430import com.view.text.config.TagConfig
@@ -630,26 +636,49 @@ private fun createItemView(context: Context, config: TagConfig): View {
630636 config.padding ? : config.bottomPadding
631637 )
632638 // 圆角
633- val cornerRadii = floatArrayOf(
634- config?.radius ? : config.leftTopRadius, config?.radius ? : config.leftTopRadius,
635- config?.radius ? : config.rightTopRadius, config?.radius ? : config.rightTopRadius,
636- config?.radius ? : config.rightBottomRadius, config?.radius ? : config.rightBottomRadius,
637- config?.radius ? : config.leftBottomRadius, config?.radius ? : config.leftBottomRadius
638- )
639- val gradientDrawable = GradientDrawable ().apply {
640- setCornerRadii(cornerRadii)
641- this .colors =
642- intArrayOf(
643- config.startGradientBackgroundColor ? : config.backgroundColor,
644- config.endGradientBackgroundColor ? : config.backgroundColor
639+ if (config?.backgroundDrawable != null ) {
640+ val backgroundImageView = ShapeableImageView (context).apply {
641+ background = config?.backgroundDrawable
642+ shapeAppearanceModel = ShapeAppearanceModel .builder().apply {
643+ setTopLeftCornerSize(config?.radius ? : config.leftTopRadius)
644+ setTopRightCornerSize(config?.radius ? : config.rightTopRadius)
645+ setBottomLeftCornerSize(config?.radius ? : config.leftBottomRadius)
646+ setBottomRightCornerSize(config?.radius ? : config.rightBottomRadius)
647+ }.build()
648+ }
649+ return FrameLayout (context).apply {
650+ addView(
651+ backgroundImageView,
652+ FrameLayout .LayoutParams (
653+ if (config.width == 0 ) FrameLayout .LayoutParams .WRAP_CONTENT else config.width,
654+ if (config.height == 0 ) FrameLayout .LayoutParams .WRAP_CONTENT else config.height
655+ )
645656 )
646- if (config.strokeWidth > 0 ) {
647- setStroke(config.strokeWidth, config.strokeColor)
657+ addView(tagItemView)
658+ (tagItemView.layoutParams as ? FrameLayout .LayoutParams )?.gravity = Gravity .CENTER
659+ }
660+ } else {
661+ val cornerRadii = floatArrayOf(
662+ config?.radius ? : config.leftTopRadius, config?.radius ? : config.leftTopRadius,
663+ config?.radius ? : config.rightTopRadius, config?.radius ? : config.rightTopRadius,
664+ config?.radius ? : config.rightBottomRadius, config?.radius ? : config.rightBottomRadius,
665+ config?.radius ? : config.leftBottomRadius, config?.radius ? : config.leftBottomRadius
666+ )
667+ val gradientDrawable = GradientDrawable ().apply {
668+ setCornerRadii(cornerRadii)
669+ this .colors =
670+ intArrayOf(
671+ config.startGradientBackgroundColor ? : config.backgroundColor,
672+ config.endGradientBackgroundColor ? : config.backgroundColor
673+ )
674+ if (config.strokeWidth > 0 ) {
675+ setStroke(config.strokeWidth, config.strokeColor)
676+ }
677+ orientation = config.gradientOrientation
648678 }
649- orientation = config.gradientOrientation
679+ tagItemView.background = gradientDrawable
680+ return tagItemView
650681 }
651- tagItemView.background = gradientDrawable
652- return tagItemView
653682}
654683
655684/* *
0 commit comments