@@ -52,7 +52,8 @@ open class MultiItemTextView : View {
5252 private val mShadowItems = ArrayList <String >()
5353 // 分割后的字符串,用于绘制多行文本
5454 private val mDividedItems = ArrayList <List <String >>()
55-
55+ // 该列表中的元素仅用于计算高度(mRefWidth!=-1F时)
56+ private val mRefDividedItems = ArrayList <List <String >>()
5657
5758 constructor (context: Context ? ) : super (context) {
5859 init (context, null )
@@ -116,6 +117,7 @@ open class MultiItemTextView : View {
116117 mTextSize = ta.getDimension(R .styleable.MultiItemTextView_mitv_text_size , 24F )
117118 mItemWidth = ta.getDimension(R .styleable.MultiItemTextView_mitv_item_width , - 1F )
118119 mItemHeight = ta.getDimension(R .styleable.MultiItemTextView_mitv_item_height , - 1F )
120+ mRefWidth = ta.getDimension(R .styleable.MultiItemTextView_mitv_ref_item_width , - 1F )
119121 mDividerColor = ta.getDimensionPixelSize(R .styleable.MultiItemTextView_mitv_divider_color ,
120122 Color .GRAY )
121123 mDividerWidth = ta.getDimension(R .styleable.MultiItemTextView_mitv_divider_width , 1F )
@@ -266,9 +268,9 @@ open class MultiItemTextView : View {
266268 mPaint.color = mDividerColor
267269 mPaint.strokeWidth = mDividerWidth
268270 mPaint.style = Paint .Style .FILL
269- if (mStartDividerEnable) {
270- canvas.drawRect(0F , 0F , mDividerWidth, height.toFloat(), mPaint)
271- }
271+ if (mStartDividerEnable) {
272+ canvas.drawRect(0F , 0F , mDividerWidth, height.toFloat(), mPaint)
273+ }
272274 if (mTopDividerEnable) {
273275 canvas.drawRect(0F , 0F , width.toFloat(), top, mPaint)
274276 }
@@ -355,11 +357,11 @@ open class MultiItemTextView : View {
355357 private fun calItemHeight (): Float {
356358 return if (mItemHeight == - 1F ) {
357359 var lines = 0
358- mDividedItems
360+ ( if (mRefWidth == - 1F ) mDividedItems else mRefDividedItems)
359361 .asSequence()
360362 .filter { it.size > lines }
361363 .forEach { lines = it.size }
362- paddingTop + paddingBottom + mItemPadding[1 ] + mItemPadding[3 ] + lines * getDisplayFontSize().toFloat()
364+ paddingTop + paddingBottom + mItemPadding[1 ] + mItemPadding[3 ] + lines * getDisplayFontSize().toFloat() + ( if (mTopDividerEnable) mDividerWidth else 0F ) + ( if (mBottomDividerEnable) mDividerWidth else 0F )
363365 } else {
364366 mItemHeight
365367 }
@@ -370,10 +372,17 @@ open class MultiItemTextView : View {
370372 // 每次重新分割item前都将已经分割的清空
371373 mDividedItems.clear()
372374 // 首先需要计算可绘制的最大宽度
375+
373376 val drawableWidth = calItemWidth(width) - mItemPadding[0 ] - mItemPadding[2 ]
377+
374378 if (drawableWidth > 0 ) {
375379 // 需要保证每一行的宽度都小于drawableWidth
376380 mShadowItems.mapTo(mDividedItems) { divideItem(drawableWidth, it) }
381+ if (mRefWidth != - 1F ) {
382+ mShadowItems.mapTo(mRefDividedItems) {
383+ divideItem(mRefWidth - paddingLeft - paddingRight - mItemPadding[0 ] - mItemPadding[2 ], it)
384+ }
385+ }
377386 }
378387 }
379388
0 commit comments