在main.xml文件中代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<com.tarena.touch.MyPaintView

android:id="@+id/paintView"

android:layout_width="fill_parent"

android:layout_height="fill_parent"/>

</LinearLayout>

在MyPaintView.java中代码如下:

package com.tarena.touch;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Point;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.view.View;

public class MyPaintView extends View{

private List<Point> allPoint = new ArrayList<Point>();  //保存所有的操作坐标

public MyPaintView(Context context, AttributeSet attrs) {  //接收Context,同时接收属性集合

super(context, attrs); //调用父类的构造

super.setOnTouchListener(new OnTouchListenerImpl());

}

private class OnTouchListenerImpl implements OnTouchListener{

public boolean onTouch(View v, MotionEvent event) {

Point p = new Point((int) event.getX(),(int) event.getY());  //将坐标保存在Point类中

if(event.getAction() == MotionEvent.ACTION_DOWN){    //用户按下

MyPaintView.this.allPoint = new ArrayList<Point>();  //重绘

MyPaintView.this.allPoint.add(p);  //保存新的点

}

else if(event.getAction() == MotionEvent.ACTION_UP){  //用户松开

MyPaintView.this.allPoint.add(p);  //记录坐标点

MyPaintView.this.postInvalidate(); //重绘图形

}

else if(event.getAction() == MotionEvent.ACTION_MOVE){  //用户移动

MyPaintView.this.allPoint.add(p);  //记录坐标点

MyPaintView.this.postInvalidate(); //重绘图形

}

return true;  //表示下面的操作不再执行

}

}

protected void onDraw(Canvas canvas){ //进行重绘

Paint p = new Paint(); //依靠此类开始画线

p.setColor(Color.RED); //定义线的颜色

if(MyPaintView.this.allPoint.size() > 1){ // 有坐标点保存的时候开始绘图

Iterator<Point> iter = MyPaintView.this.allPoint.iterator();

Point first = null;  //开始的坐标点

Point last = null; //结束的坐标点

while(iter.hasNext()){

if(first == null){

first = (Point) iter.next();  //现在没有在绘图,取出坐标

}

else{

if(last != null){  //前一阶段已经完成

first = last; //重新更新下一阶段

}

last = (Point) iter.next(); //结束点坐标

canvas.drawLine(first.x, first.y, last.x, last.y, p);

}

}

}

}

}

在MyTouchDemo.java中代码如下:

package com.tarena.touch;

import android.app.Activity;

import android.os.Bundle;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnTouchListener;

import android.widget.TextView;

public class MyTouchDemo extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.setContentView(R.layout.main);

}

}

android 绘图的更多相关文章

  1. 论文第5章:Android绘图平台的实现

    面向移动设备的矢量绘图平台设计与实现 Design and Implementation of Mobile Device-oriented Vector Drawing Platform 引用本论文 ...

  2. android 绘图之Canvas,Paint类

    Canvas,Paint 1.在android 绘图但中经常要用到Canvas和Paint类,Canvas好比是一张画布,上面已经有你想绘制图画的轮廓了,而Paint就好比是画笔,就要给Canvas进 ...

  3. Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧

    第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DP ...

  4. 第三章 Android绘图机制与处理技巧

    1.屏幕尺寸信息 屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DPI(Dots Per Inch),它是对 ...

  5. Android群英传笔记——第六章:Android绘图机制与处理技巧

    Android群英传笔记--第六章:Android绘图机制与处理技巧 一直在情调,时间都是可以自己调节的,不然世界上哪有这么多牛X的人 今天就开始读第六章了,算日子也刚好一个月了,一个月就读一半,这效 ...

  6. Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美

    Android绘图机制(四)--使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 这里为什么不继续把自定义View写下去呢,因为最近项目 ...

  7. Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件

    Android绘图机制(三)--自定义View的三种实现方式以及实战项目操作 在Android绘图机制(一)--自定义View的基础属性和方法 里说过,实现自定义View有三种方式,分别是 1.对现有 ...

  8. Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解

    Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆 ...

  9. Android绘图机制(一)——自定义View的基础属性和方法

    Android绘图机制(一)--自定义View的基础属性和方法 自定义View看起来,确实看起来高深莫测,很多Android开发都不是特别在行这一块,这里面的逻辑以及一些绘画都是有一点难的,说一下我目 ...

  10. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有Java层的,也有jni层深入到Framework.Canvas有许多的知识内容,构建了一个武器库一般,所谓十 ...

随机推荐

  1. JAVA泛型那些事儿

    本篇内容源于本人一个好友sgpro提供的java学习例子,现拿出来给大家分享. 此例子非常直观的通过代码讲解了java泛型的用法和好处,是笔者一直珍藏的最好的泛型学习笔记. 一.面向过程的时代 我们先 ...

  2. 数据转换错误,java.lang.NumberFormatException: null

    今天写项目时报了一个数组转换错误的异常,让我找了半天5555 -_- . 一般出现这种错误呢,情况都是parseInt转换所触发的,像下面这行代码 int factorOneInt = Integer ...

  3. 搭建maven项目简介

    http://jingyan.baidu.com/album/9f7e7ec0b714ae6f29155465.html?picindex=1 Maven学习 (一) 搭建Maven环境 http:/ ...

  4. vsftp的设置选项

    设置匿名用户上传的文件的权限: anon_umask=  匿名用户新增文件的umask 数值.默认值为077.     VSFTPD的设置选项 VSFTPD的配置文件/etc/vsftpd/vsftp ...

  5. CADisplayLink的简单使用

    CADisplayLink类似NSTimer是一个定时器,只不过是一秒会调用60次指定的方法 使用方法: #import "ViewController.h" @interface ...

  6. php遍历数据库

    数据库 <?php mysql_connect("localhost","root",""); mysql_set_charset(& ...

  7. log4j的配置及使用

    用日志的好处: 可以长久的保存日志信息. 日志可以保存到:网络.文件.数据库 设置日志的级别. OFF Fatal – System.exit(0); - JVM, ERROR – 错误,模块错误. ...

  8. QT学习:入门篇(三)

    头文件: #ifndef CChatDisplaySet_h #define CChatDisplaySet_h #include "QtGui/QDialog" #include ...

  9. 网易JS面试题与Javascript词法作用域说明

    调用对象位于作用域链的前端,局部变量(在函数内部用var声明的变量).函数参数及Arguments对象都在函数内的作用域中--这意味着它们隐藏了作用域链更上层的任何同名的属性. 2010年9月14日, ...

  10. phpwind伪静态规则(IIS,Nginx,Apache)的介绍及代码

    phpwind iis下伪静态规则[ISAPI_Rewrite]RewriteRule ^(.*)/(.*)-htm-(.*)-(.*).html$ $1/$2.php?$3=$4RewriteRul ...