在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. Wcf+EF框架搭建实例

    一.最近在使用Wcf创建数据服务,但是在和EF框架搭建数据访问时遇到了许多问题 下面是目前整理的基本框架代码,经供参考使用,源代码地址:http://git.oschina.net/tiama3798 ...

  2. java JNI 的实现(1)-又进一步加深对JVM实现的理解

    目录 概述 主要优点 主要缺点 JNI实现的简单例子 开发工具 简略步骤 1,在eclipse的 'java类' 中声明一个 'native方法'; 2,使用 'javah' 命令生成包含'nativ ...

  3. 工作中部署使用MP平台的一些问题

    1.首先先把项目导入到myeclipse中,如果没有.classpath和.mymetadata和.project等文件,就自己创建一个web项目,然后把里面的src覆盖,webroot等文件覆盖. ...

  4. QT5-控件-QFontComboBox-字体选择下拉列表,使用一个标签查看效果

    #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QFontComboBox> ...

  5. 2013多校联合2 I Warm up 2(hdu 4619)

    Warm up 2 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total ...

  6. js中的apply call 操作小结(参考自网络)

    1.方法定义 call方法:  语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 说明: call ...

  7. HTML5 canvas 中的线条样式

    线条样式属性 lineCap        设置或返回线条的结束端点样式 butt         默认.向线条的每个末端添加平直的边缘. round         向线条的每个末端添加圆形线帽. ...

  8. WebSQL实例记录

    <table id="content"> </table> <br> <input type="button" id= ...

  9. 利用google浏览器开发者工具调试网页(详)

    前端程序员或者在校大学生正在开发网页,如果想要测试或者通过测试优化网页结构,该怎么办呢?这就需要用到一款工具,chrome浏览器的开发者工具?本文写给尚不熟悉这个开发者工具的同学们或者同行们,话不多说 ...

  10. java反射 -Class类

    Class类:任何类都是Class类的对象 Class类的实例对象的三种表现形式:1.通过某个类的.class实现 2.某个类的对象的getClass()方法 3.Class.forName() 注意 ...