package com.loaderman.customviewdemo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View; public class MinTextRectView extends View {
public MinTextRectView(Context context, AttributeSet attrs) {
super(context, attrs);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
String text = "harvic\'s blog";
int baseLineY = 90;
int baseLineX = 0 ; //设置paint
Paint paint = new Paint();
paint.setTextSize(60); //以px为单位
paint.setTextAlign(Paint.Align.LEFT); //画text所占的区域
Paint.FontMetricsInt fm = paint.getFontMetricsInt();
int top = baseLineY + fm.top;
int bottom = baseLineY + fm.bottom;
int width = (int)paint.measureText(text);
Rect rect = new Rect(baseLineX,top,baseLineX+width,bottom); paint.setColor(0xA0888888);
canvas.drawRect(rect,paint); //画最小矩形
Rect minRect = new Rect();
paint.getTextBounds(text,0,text.length(),minRect);
minRect.top = baseLineY + minRect.top;
minRect.bottom = baseLineY + minRect.bottom;
paint.setColor(Color.BLACK);
canvas.drawRect(minRect,paint); //写文字
paint.setColor(Color.WHITE);
canvas.drawText(text, baseLineX, baseLineY, paint);
}
}
package com.loaderman.customviewdemo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View; public class MyTextView extends View {
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
} protected void onDraw(Canvas canvas) {
super.onDraw(canvas); canvas.drawColor(Color.WHITE); int baseLineY = 90;
int baseLineX = 0; Paint paint = new Paint();
//写文字
paint.setColor(Color.BLACK);
paint.setTextSize(60); //以px为单位
paint.setTextAlign(Paint.Align.LEFT);
canvas.drawText("harvic\'s blog", baseLineX, baseLineY, paint); //计算各线在位置
Paint.FontMetrics fm = paint.getFontMetrics();
float ascent = baseLineY + fm.ascent;
float descent = baseLineY + fm.descent;
float top = baseLineY + fm.top;
float bottom = baseLineY + fm.bottom; //画基线
paint.setColor(Color.RED);
canvas.drawLine(baseLineX, baseLineY, 3000, baseLineY, paint); //画top
paint.setColor(Color.BLUE);
canvas.drawLine(baseLineX, top, 3000, top, paint); //画ascent
paint.setColor(Color.GREEN);
canvas.drawLine(baseLineX, ascent, 3000, ascent, paint); //画descent
paint.setColor(Color.GREEN);
canvas.drawLine(baseLineX, descent, 3000, descent, paint); //画bottom
paint.setColor(Color.RED);
canvas.drawLine(baseLineX, bottom, 3000, bottom, paint); }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
> <com.loaderman.customviewdemo.MinTextRectView
android:layout_width="match_parent"
android:layout_height="300dp"/>
<com.loaderman.customviewdemo.MyTextView
android:layout_width="match_parent"
android:layout_height="300dp"/>
</LinearLayout>

效果:

最新文章

  1. python学习笔记(2)
  2. UUID(uuid)js 生成
  3. HDU 1452 Happy 2004 (逆元+快速幂+积性函数)
  4. 如何在linux系统下面编译C++(写给小白)(-1)
  5. JVM-垃圾收集器
  6. 227. Basic Calculator II
  7. 138. Copy List with Random Pointer
  8. 51cto那些技术专题们
  9. C语言 - 预编译
  10. Textbox服务器控件
  11. 7 款华丽的 HTML5 Loading 动画特效
  12. emscripten、 WebAssembly,传递字符串给c函数
  13. 使用scrapy爬虫,爬取今日头条搜索吉林疫苗新闻(scrapy+selenium+PhantomJS)
  14. # -*- coding: utf-8 -*-
  15. springboot No Identifier specified for entity的解决办法
  16. redis执行lua文件
  17. TXLSReadWriteII 公式计算
  18. PHP开发——分支结构
  19. 等宽高的ImageButton
  20. Performance testing test scenarios

热门文章

  1. The 2019 Asia Nanchang First Round Online Programming Contest The Nth Item
  2. can&#39;t assign to struct fileds in map
  3. java中的strictfp的作用
  4. 一次vaccum导致的事故
  5. 怎么区分PV、IV、UV
  6. 两数最大公约数 GCD
  7. [React + GraphQL] Use useLazyQuery to manually execute a query with Apollo React Hooks
  8. struts--CRUD优化(图片上传)
  9. 四十三.MongoDB副本集 MongoDB文档管理
  10. [Luogu] 受欢迎的牛