我们在开发当中很多时候都需要自定义组件,通过自定义组件,可以随心所欲定制酷炫的效果。下面将演示自定义绘图组件。我们要绘制一个红色的线条。

1.建立工程文件,名为TouchDemo。




2.布局文件

<?xml version="1.0" encoding="utf-8"?>
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
android:id="@+id/myView"
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" />

3.核心代码

MainActivity.java如下:


package org.touch.cn;


import android.app.Activity;
import android.os.Bundle;


public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
    } 
}

MyPaintView.java如下:

package org.touch.cn;


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


import android.app.ListActivity;
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 allpoint = new ArrayList();//保存所以的操作坐标
public MyPaintView(Context context, AttributeSet attrs) {//接收context,同时接收属性集合。
super(context, attrs);//调用父类的构造
super.setOnTouchListener(new OnTouchListenerimpl());
}
private class OnTouchListenerimpl implements OnTouchListener{


@Override
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();//重绘
MyPaintView.this.allpoint.add(p);//保存坐标点

}else if(event.getAction()==MotionEvent.ACTION_MOVE){//用户移动
MyPaintView.this.allpoint.add(p);//记录坐标点
MyPaintView.this.postInvalidate();//重绘图形
}else if(event.getAction()==MotionEvent.ACTION_UP){//用户松开
MyPaintView.this.allpoint.add(p);//记录坐标点
MyPaintView.this.postInvalidate();//重绘图形


}

return true; //表示下面的操作不在执行了。
}

}
@Override
protected void onDraw(Canvas canvas) { //进行绘图
Paint paint = new Paint();//依靠此类开始画线
paint.setColor(Color.RED);
if(MyPaintView.this.allpoint.size()>0)//有坐标点保存的时候开始进行绘图
{
Iterator iterator = MyPaintView.this.allpoint.iterator();
Point first=null;
Point last=null;
while(iterator.hasNext()){
if(first==null)
{
first= (Point)iterator.next();//取出坐标
}else {
if(last!=null){//前一阶段已经完成
first = last;//重新开始下一阶段
}
last=(Point)iterator.next();//结果点坐标
canvas.drawLine(first.x, first.y, last.x, last.y, paint);
}
}
}
}

}

4.运行效果



5。奉上源码:  ===========》http://download.csdn.net/detail/gsg8709/4144454



更多相关文章

  1. android中scrollTo和scrollBy的理解
  2. Android(安卓)SurviceView的触控和轨迹球事件 .
  3. android drawtext 之baseline
  4. TextView组件改变部分文字的颜色
  5. 使用Android(安卓)OpenGL ES 2.0绘图之四:应用投影和相机视图
  6. Android(安卓)的第三方报表组件,AChartEngine 案列demo
  7. 【Android(安卓)Developers Training】 27. 序言:和其它应用交互
  8. Android(安卓)Arrayadapter 获得数据方法
  9. Android(安卓)OpenGL ES2.0 and GLSL 一个简单的Demo

随机推荐

  1. android中系统时间
  2. Android设置Progress的颜色
  3. Android(安卓)c和c++函数调用堆栈分析
  4. android缓存机制
  5. Android开发:设置USB tethering 和USB deb
  6. 【Android面试】Android面试题集锦 (陆续
  7. Android启动过程的Zygote进程
  8. single无效,使用maxLines???
  9. Android实现指定区域截屏的实现
  10. 推出Android原生开发工具包r16