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.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView; public class RectRefreshSurfaceView extends SurfaceView {
private Paint mPaint; public RectRefreshSurfaceView(Context context) {
super(context);
init();
} public RectRefreshSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
} public RectRefreshSurfaceView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
} private void init() {
mPaint = new Paint();
mPaint.setColor(Color.argb(0x1F, 0xFF, 0xFF, 0xFF));
mPaint.setTextSize(30); getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
drawText(holder);
} @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
} @Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
} private void drawText(final SurfaceHolder holder) {
new Thread(new Runnable() { @Override
public void run() { //先进行清屏操作
while (true) {
Rect dirtyRect = new Rect(0, 0, 1, 1);
Canvas canvas = holder.lockCanvas(dirtyRect);
Rect canvasRect = canvas.getClipBounds();
if (getWidth() == canvasRect.width() && getHeight() == canvasRect.height()) {
canvas.drawColor(Color.BLACK);
holder.unlockCanvasAndPost(canvas);
} else {
holder.unlockCanvasAndPost(canvas);
break;
}
} //画图
for (int i = 0; i < 10; i++) {
//画大方
if (i == 0) {
Canvas canvas = holder.lockCanvas(new Rect(10, 10, 600, 600));
dumpCanvasRect(canvas);
canvas.drawColor(Color.RED);
holder.unlockCanvasAndPost(canvas);
} //画中方
if (i == 1) {
Canvas canvas = holder.lockCanvas(new Rect(30, 30, 570, 570));
dumpCanvasRect(canvas);
canvas.drawColor(Color.GREEN);
holder.unlockCanvasAndPost(canvas);
} //画小方
if (i == 2) {
Canvas canvas = holder.lockCanvas(new Rect(60, 60, 540, 540));
dumpCanvasRect(canvas);
canvas.drawColor(Color.BLUE);
holder.unlockCanvasAndPost(canvas);
} //画圆形
if (i == 3) {
Canvas canvas = holder.lockCanvas(new Rect(200, 200, 400, 400));
dumpCanvasRect(canvas);
mPaint.setColor(Color.argb(0x3F, 0xFF, 0xFF, 0xFF));
canvas.drawCircle(300, 300, 100, mPaint);
holder.unlockCanvasAndPost(canvas);
}
//写字
if (i == 4) {
Canvas canvas = holder.lockCanvas(new Rect(250, 250, 350, 350));
dumpCanvasRect(canvas);
mPaint.setColor(Color.RED);
canvas.drawText(i + "", 300, 300, mPaint);
holder.unlockCanvasAndPost(canvas);
} try {
Thread.sleep(800);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
} private void dumpCanvasRect(Canvas canvas) {
if (canvas != null) {
Rect rect = canvas.getClipBounds();
Log.d("loaderman", "left:" + rect.left + " top:" + rect.top + " right:" + rect.right + " bottom:" + rect.bottom);
}
}
}

效果:

最新文章

  1. 10大白帽黑客专用的 Linux 操作系统
  2. cocopods 知识集合 及 一个 好的 国外iOS技术翻译站
  3. sencha touch api 使用指南
  4. codevs 1220 数字三角形
  5. 【笔记】让DIV水平垂直居中的两种方法
  6. R语言分析(一)-----基本语法
  7. Linux帮助手册(man)
  8. 【RL-TCPnet网络教程】第20章 RL-TCPnet之BSD Socket客户端
  9. Token令牌管理权限
  10. java连接服务器语法
  11. EF Core 生成数据库
  12. 简单易懂的程序语言入门小册子(5):基于文本替换的解释器,递归,不动点,fix表达式,letrec表达式
  13. CSS实现水平居中的5种思路
  14. ARM交叉编译工具链
  15. 使用jsonp进行跨站点数据访问
  16. (二)this、call和apply
  17. uwp获取版本信息win10 VersionInfo
  18. 理解 atime,ctime,mtime (上)
  19. HADOOP docker(九):hdfs权限
  20. linux命令(13):kill/killall命令

热门文章

  1. Formal Analysis of the TLS Handshake Protocol -----论文整理
  2. DNS服务——智能域名解析、镜像Web站点、直接域名泛域名
  3. IAR建立stm32工程
  4. Java学习笔记——第1篇
  5. idea上 实现了Serializable接口,要自动生成serialVersionUID的方法
  6. jstack、jmc、jhat工具使用详解
  7. Linq 中 Join 的用法
  8. Java原子类--AtomicReference
  9. CentOS7.x安装nodejs-10.16.3
  10. MySQL之JDBC插入、修改、删除封装集于一个方法