自定义VerticalTextView

最近做需求,网上找不到链接,于是自己做一个简陋版的VerticalTextView

GitHub下载链接
git@github.com:13540634851/PreferenceDemo.git

效果图

渐变纵向中英文混合.png在这里插入图片描述

注意:

  1. 由于是自定义View,TextView’的属性在这里不管用
  2. 只有3个方法可用
    设置显示的字符串
    public void setText(String text) ;
    设置对齐方式
    Gravity.START
    Gravity.CENTER
    Gravity.END
    public void setGravity(int gravity) ;
    设置是否垂直显示
    public void setHorizontal(boolean orientation) ;
  3. 支持warp_content属性
  4. 支持中英文混合显示(英文旋转,中文不旋转)

由于中英文在FontMetrics显示的问题,建议根据需求再调整一下

可用方法

 //设置颜色渐变
    public void setLinearGradientColor(int[] color, int angle) {
   
        mLinearGradientColor = color;
        mAngle = angle;
        update();
    }

    //设置字符串
    public void setText(String text) {
   
        this.mText = text;
        update();
    }

    //设置对齐方式
    public void setGravity(int mGravity) {
   
        this.mGravity = mGravity;
        update();
    }

    //设置显示方式
    public void setHorizontal(boolean orientation) {
   
        this.mIsHorizontal = orientation;
        update();
    }

    public boolean isHorizontal() {
   
        return mIsHorizontal;
    }

    public void update() {
   
        requestLayout();
        invalidate();
    }

代码
VerticalTextView.java

package com.can.testpreference.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;

import androidx.annotation.Nullable;

import java.util.HashMap;

public class VerticalTextView extends View {
   
    private Paint mPaint;
    private Paint mDebugPaint;
    private float mSpacing;
    private String mText;
    private boolean mIsHorizontal = false;
    private Paint.FontMetrics mFontMetrics;
    private String[] mDrawText;
    private float mWordHeight;
    private float mVerticalwordHeight;
    private int mGravity = Gravity.START;
    private int mViewWidth, mViewHeight;
    private HashMap<Integer, Integer> mLengthRecord;
    private float mChineseWordWdth = -1;
    private static final boolean DEBUG = true;
    private int[] mLinearGradientColor;
    private int mAngle;

    public VerticalTextView(Context context) {
   
        super(context);
        init();
    }

    public VerticalTextView(Context context, @Nullable AttributeSet attrs) {
   
        super(context, attrs);
        init();
    }

    public VerticalTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
   
        super(context, attrs, defStyleAttr);
        init();
    }

    public VerticalTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
   
        super(context, attrs);
        init();
    }

    //设置颜色渐变
    public void setLinearGradientColor(int[] color, int angle) {
   
        mLinearGradientColor = color;
        mAngle = angle;
        update();
    }

    //设置字符串
    public void setText(String text) {
   
        this.mText = text;
        update();
    }

    //设置对齐方式
    public void setGravity(int mGravity) {
   
        this.mGravity = mGravity;
        update();
    }

    //设置显示方式
    public void setHorizontal(boolean orientation) {
   
        this.mIsHorizontal = orientation;
        update();
    }

    public boolean isHorizontal() {
   
        return mIsHorizontal;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值