1.
public class ClassThreeiew extends View{
public ClassThreeiew(Context context) {
super(context);
}
public ClassThreeiew(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public ClassThreeiew(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
String text = "Hello HenCoder";
Typeface typeface;
{
paint.setTextSize(60);
typeface = Typeface.createFromAsset(getContext().getAssets(), "Satisfy-Regular.ttf");
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 使用 Paint.setTypeface() 来设置不同的字体
// 第一处:填入 null 来设置默认字体
paint.setTypeface(null);
canvas.drawText(text, 50, 100, paint);
// 第二处:填入 Typeface.SERIF 来设置衬线字体(宋体)
paint.setTypeface(Typeface.SERIF);
canvas.drawText(text, 50, 200, paint);
// 第三处:填入 typeface 对象来使用 assets 目录下的 "Satisfy-Regular.ttf" 文件
paint.setTypeface(Typeface.createFromAsset(getContext().getAssets(),"Satisfy-Regular.ttf"));
canvas.drawText(text, 50, 300, paint);
}
}
2.
public class ClassThreeiew extends View{
Paint paint1 = new Paint(Paint.ANTI_ALIAS_FLAG);
Paint paint2 = new Paint(Paint.ANTI_ALIAS_FLAG);
String text1 = "三个月内你胖了";
String text2 = "4.5";
String text3 = "公斤";
public ClassThreeiew(Context context) {
super(context);
}
public ClassThreeiew(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public ClassThreeiew(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
{
paint1.setTextSize(60);
paint2.setTextSize(120);
paint2.setColor(Color.parseColor("#E91E63"));
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 使用 Paint.measureText 测量出文字宽度,让文字可以相邻绘制
float measureText1 = paint1.measureText(text1);
float measureText2 = paint2.measureText(text2);
canvas.drawText(text1, 50, 200, paint1);
canvas.drawText(text2, 50 + measureText1, 200, paint2);
canvas.drawText(text3, 50 + measureText1 + measureText2, 200, paint1);
}
}
3.
public class ClassThreeiew extends View{
Paint paint1 = new Paint(Paint.ANTI_ALIAS_FLAG);
Paint paint2 = new Paint(Paint.ANTI_ALIAS_FLAG);
String[] texts = {"A", "a", "J", "j", "Â", "â"};
int top = 200;
int bottom = 400;
public ClassThreeiew(Context context) {
super(context);
}
public ClassThreeiew(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public ClassThreeiew(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
{
paint1.setStyle(Paint.Style.STROKE);
paint1.setStrokeWidth(20);
paint1.setColor(Color.parseColor("#E91E63"));
paint2.setTextSize(160);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRect(50, top, getWidth() - 50, bottom, paint1);
// 使用 Paint.getFontMetrics() 计算出文字的显示区域
// 然后计算出文字的绘制位置,从而让文字上下居中
// 这种居中算法的优点是,可以让不同的文字的 baseline 对齐
int middle = (top + bottom) / 2;
Paint.FontMetrics fontMetrics = paint2.getFontMetrics();
float offsetY = -(fontMetrics.ascent + fontMetrics.descent) / 2;
canvas.drawText(texts[0], 100, middle + offsetY, paint2);
canvas.drawText(texts[1], 200, middle + offsetY, paint2);
canvas.drawText(texts[2], 300, middle + offsetY, paint2);
canvas.drawText(texts[3], 400, middle + offsetY, paint2);
canvas.drawText(texts[4], 500, middle + offsetY, paint2);
canvas.drawText(texts[5], 600, middle + offsetY, paint2);
}
}