最近做需求,网上找不到链接,于是自己做一个简陋版的VerticalTextView
GitHub下载链接
git@github.com:13540634851/PreferenceDemo.git
效果图
渐变纵向中英文混合.png
注意:
- 由于是自定义View,TextView’的属性在这里不管用
- 只有3个方法可用
设置显示的字符串,
public void setText(String text) ;
设置对齐方式
Gravity.START
Gravity.CENTER
Gravity.END
public void setGravity(int gravity) ;
设置是否垂直显示
public void setHorizontal(boolean orientation) ; - 支持warp_content属性
- 支持中英文混合显示(英文旋转,中文不旋转)
由于中英文在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;
}