import android.content.Context
import android.graphics.Canvas
import android.util.AttributeSet
import android.view.Gravity
import androidx.appcompat.widget.AppCompatTextView
class VerticalTextView(context: Context, attrs: AttributeSet) :
AppCompatTextView(context, attrs) {
private var topDown = false
init {
val gravity = gravity
topDown =
if (Gravity.isVertical(gravity) && gravity and Gravity.VERTICAL_GRAVITY_MASK == Gravity.BOTTOM) {
setGravity(gravity and Gravity.HORIZONTAL_GRAVITY_MASK or Gravity.TOP)
false
} else true
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(heightMeasureSpec, widthMeasureSpec)
setMeasuredDimension(measuredHeight, measuredWidth)
}
override fun onDraw(canvas: Canvas) {
val textPaint = paint
textPaint.setColor(currentTextColor)
textPaint.drawableState = drawableState
canvas.save()
//默認(rèn)為文字朝右,即旋轉(zhuǎn)了90度
//設(shè)置android:gravity="bottom"時,他會文字朝向左,即旋轉(zhuǎn)了270度
if (topDown) {
canvas.translate(width.toFloat(), 0f)
canvas.rotate(90f)
} else {
canvas.translate(0f, height.toFloat())
canvas.rotate(-90f)
}
canvas.translate(getCompoundPaddingLeft().toFloat(), getExtendedPaddingTop().toFloat())
layout.draw(canvas)
canvas.restore()
}
}
TextView 豎直顯示文字,并做對應(yīng)的旋轉(zhuǎn),使他在布局中也是正確的大小
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 今天分享一個Layout布局中的一個小技巧,希望看過之后你也可以寫出性能更好的布局,我個人的目的是用最少的view...
- 需求是一行顯示三個控件,左邊顯示一張圖片,中間顯示TextView,右邊顯示圖片如果不做處理,TextView如果...
- CGFloat h = [model.message boundingRectWithSize:CGSizeMak...
- 先看大眾點評的購買須知 如上圖,需求在每條提示語句前加一個小圓點,我剛看到需求就想到用 android:drawa...
- 如上圖所示這兩種效果,我想在大家開發(fā)過程中應(yīng)該也會碰到。我這邊寫一個簡單的實現(xiàn)效果供大家借鑒,或者有好的實現(xiàn)方法可...