方法一:

新建"MyView"类

package onTouchEvent;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View; public class MyView extends View {
private int textX=,textY=;
public MyView(Context context) {
super(context);
setFocusable(true);
// TODO Auto-generated constructor stub
}
//画笔onDraw方法
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
//初始化画笔
Paint paint=new Paint();
//设置颜色
paint.setColor(Color.GREEN);
//设置字体大小
paint.setTextSize();
//在画布上写文字
canvas.drawText("Android", textX, textY, paint);
} @Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
//获取用户手指触屏的X坐标赋值与文本的X坐标
textX=(int)event.getX();
//获取用户手指触屏的Y坐标赋值与文本的Y坐标
textY=(int)event.getY();
//重绘画布
invalidate();
return true; } }

MainActivity中将setContentView设置为当前MyView,即

setContentView(new MyView(this));

执行效果图如下:

方法二:

方法二的不用之处就是使用了SurfaceHolder(选择器)方法

package com.example.cdp;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView; public class MySurfaceView extends SurfaceView implements Callback {
//定义一个SurfaceHolder相当于选择器
private SurfaceHolder sfh;
private int textX=,textY=;
public MySurfaceView(Context context) {
super(context);
// TODO Auto-generated constructor stub
//获得SurfaceHolder对象
sfh = getHolder();
//监听surface的生命周期
sfh.addCallback(this);
//获得焦点
setFocusableInTouchMode(true);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub }
@Override
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
myDraw();
} private void myDraw() {
// TODO Auto-generated method stub
new Thread(){
public void run() {
// 通过SurfaceHolder对象获得 Surface的Canvas成员变量,并且锁住Canvas
Canvas canvas = sfh.lockCanvas();
// 刷屏
canvas.drawColor(Color.BLACK);
// 初始画笔
Paint paint = new Paint();
// 设置抗锯齿,文字清晰点,不过相对比较耗性能
paint.setAntiAlias(true);
// 设置画笔颜色
paint.setColor(Color.RED);
// 设置文字大小
paint.setTextSize();
// 画(写)文字
canvas.drawText("Android", textX, textY, paint);
// 画完后,再将缓存的内容渲染到屏幕上,同时也是解锁
sfh.unlockCanvasAndPost(canvas);
};
}.start();
} @Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
//return super.onTouchEvent(event);
// 获取用户手指触屏的X坐标赋值与文本的X坐标
textX = (int) event.getX();
// 获取用户手指触屏的Y坐标赋值与文本的Y坐标
textY = (int) event.getY();
myDraw();
return true;
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub } }

执行效果图:

最新文章

  1. php : MVC 演示(使用单例工厂)
  2. web前端面试题
  3. 学习SVG系列(5):SVG渐变
  4. U盘安装WIN10专业版
  5. second class
  6. 在eclipse中安装插件
  7. OSM 中国数据(每天都在更新)
  8. Linux 确定系统glibc版本
  9. 浅谈JS中的闭包
  10. python相似模块用例(一)
  11. python socket服务器进行远程升级
  12. CSS3及JS媒体查询教程
  13. android 如何画心
  14. 剑指Offer——知识点储备-Java基础
  15. Java Web项目漏洞:检测到目标URL存在http host头攻击漏洞解决办法
  16. Programming Series 1.0 — C Programming
  17. Android为TV端助力 SharedPreferences 轻量级存储!
  18. STL库学习笔记(待补充QAQ
  19. js实现四叉树算法
  20. 微信小程序之分享或转发功能(自定义button样式)

热门文章

  1. Web项目的三层架构和MVC架构异同
  2. Android通过http协议POST传输方式
  3. mongo批量更新
  4. [AngularJS] Provider
  5. ios开发——常用经典算法OC篇&冒泡/快速
  6. Unable to automatically debug "XXXXX“
  7. LINUX 内核导论
  8. MySQL 灵异事件一则 -- desc报语法错误
  9. leetcode -- Merge k Sorted Lists add code
  10. 打开Excel时提示"您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致"