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()
//默认为文字朝右,即旋转了90度
//设置android:gravity="bottom"时,他会文字朝向左,即旋转了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()
}
}
网友评论