Draw text vertically on canvas

前端 未结 1 478
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-18 08:02

I would like to learn how to draw vertical text on the canvas. Sorry for maybe stupid question, but I can not solve this problem. I can do so:

 if (i ==         


        
相关标签:
1条回答
  • 2020-12-18 08:38

    Try this custom textview, I don't remember where I took if from (here in StackOverflow), if any one remembers, please post a link in the comments.

    import android.content.Context;
    import android.graphics.Canvas;
    import android.text.TextPaint;
    import android.util.AttributeSet;
    import android.view.Gravity;
    import android.widget.TextView;
    
    public class VerticalTextView extends TextView
    {
        final boolean topDown;
    
        public VerticalTextView(Context context, AttributeSet attrs)
        {
            super(context, attrs);
            final int gravity = getGravity();
            if (Gravity.isVertical(gravity) && (gravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM)
            {
                setGravity((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) | Gravity.TOP);
                topDown = false;
            }
            else
                topDown = true;
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
        {
            super.onMeasure(heightMeasureSpec, widthMeasureSpec);
            setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
        }
    
        @Override
        protected void onDraw(Canvas canvas)
        {
            TextPaint textPaint = getPaint();
            textPaint.setColor(getCurrentTextColor());
            textPaint.drawableState = getDrawableState();
    
            canvas.save();
    
            if (topDown)
            {
                canvas.translate(getWidth(), 0);
                canvas.rotate(90);
            }
            else
            {
                canvas.translate(0, getHeight());
                canvas.rotate(-90);
            }
    
            canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop());
    
            getLayout().draw(canvas);
            canvas.restore();
        }
    }
    
    0 讨论(0)
提交回复
热议问题