纯代码绘制view有点粗糙
直接给代码吧,挺简单的
下面是主view代码
package jack.com.mypoint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Jack on 2014/8/19.
*/
public class MyView extends View {
private Point[] points = new Point[9];
private static int POINT_SPACE = 70;
private static int PADDING_LEFT_RIGHT = 30;
private static int outer_size = 15;
private static int outer_stork_size = 3;
private static int inner_size = 5;
private static int line_size = 5;
private boolean isInitPoints = false;
private boolean isDrawAutoLine = false;
private boolean isStorkInnerCircle = false;
private StringBuilder pointIndex = null;
public MyView(Context context){
super(context);
POINT_SPACE = dip2px(context,POINT_SPACE);
PADDING_LEFT_RIGHT = dip2px(context,PADDING_LEFT_RIGHT);
outer_size = dip2px(context, outer_size);
inner_size = dip2px(context, inner_size);
line_size = dip2px(context, line_size);
outer_stork_size = dip2px(context,outer_stork_size);
}
//每一个点都有些数据,有范围,还有一些状态,根据一些状态判断一些
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = canvas.getWidth();
int height = canvas.getHeight();
System.out.println("宽度=" + width + "高度=" + height);
initPoints(width/2,height/2,canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
final int action = event.getAction();
switch (action){
case MotionEvent.ACTION_DOWN:
pointIndex = new StringBuilder();
// mIndex=null;
isStorkInnerCircle = false;
// mIndex = new String();
isInitPoints=false;
int x = (int) event.getX();
int y = (int) event.getY();
for(int i = 0;i<points.length;i++){
points[i].isSelect = false;
}
for(int i = 0;i<points.length;i++){
//未选中
if(points[i].getPointRect().contains(x,y)){
// mIndex+=i+"";
points[i].isSelect = true;
pointIndex.append(i+"");
break;
}
}
break;
case MotionEvent.ACTION_MOVE:
isDrawAutoLine = true;
int moveX = (int) event.getX();
int moveY = (int) event.getY();
if(pointIndex.length()>0){
String index = pointIndex.toString();
int len = index.length();
String last = index.substring(len-1,len);
// System.out.println("最后的位置"+last);
points[Integer.valueOf(last)].moveX = moveX;
points[Integer.valueOf(last)].moveY = moveY;
}
for(int i = 0;i<points.length;i++){
if(points[i].isSelect){
//当前点被选中
System.out.println("当前选中的点"+i);
}else{
//未选中点
if(points[i].getPointRect().contains(moveX,moveY)){
System.out.println("当前添加的点"+i+"---"+points[i].isSelect);
//滑动到某一个点的范围里面,记录位置
pointIndex.append(i);
// mIndex+=i;
points[i].isSelect = true;
}
}
}
break;
case MotionEvent.ACTION_UP:
// isInitPoints = false;
isDrawAutoLine = false;
isStorkInnerCircle = true;
break;
}
postInvalidate();
// invalidate();
return true;
}
private void initPoints(int width,int height,Canvas canvas){
if(!isInitPoints){
System.out.println("初始化");
POINT_SPACE = width-PADDING_LEFT_RIGHT;
Point p0 = new Point();
p0.setPosition(PADDING_LEFT_RIGHT,height-POINT_SPACE);
points[0] = p0;
points[1] = new Point().setPosition(width,height-POINT_SPACE);
points[2] = new Point().setPosition(width*2-PADDING_LEFT_RIGHT,height-POINT_SPACE);
points[3] = new Point().setPosition(PADDING_LEFT_RIGHT,height);
points[4] = new Point().setPosition(width,height);
points[5] = new Point().setPosition(width*2-PADDING_LEFT_RIGHT,height);
points[6] = new Point().setPosition(PADDING_LEFT_RIGHT,height+POINT_SPACE);
points[7] = new Point().setPosition(width,height+POINT_SPACE);
points[8] = new Point().setPosition(width*2-PADDING_LEFT_RIGHT,height+POINT_SPACE);
isInitPoints = true;
}
Paint paint = new Paint();
paint.setAntiAlias(true);
if(pointIndex!=null){
if(pointIndex.length()>0){
paint.setColor(Color.DKGRAY);
paint.setStrokeWidth(line_size);
String index = pointIndex.toString();
int len = index.length();
String last = index.substring(len-1,len);
System.out.println("最后的位置"+len+"----"+last+"---"+index);
//之前的使用线连接起来
if(len>1){
for(int i=2;i<=len;i++){
System.out.println("绘制线条");
Point con = points[Integer.valueOf(index.substring(i-1,i))];
Point preCon = points[Integer.valueOf(index.substring(i-2,i-1))];
canvas.drawLine(preCon.centerX,preCon.centerY,con.centerX,con.centerY,paint);
}
}
Point p = points[Integer.valueOf(last)];
if(p.moveX!=0||p.moveY!=0){
if(isDrawAutoLine){
p.drawLine(canvas,paint,p);
}else{
System.out.println("顺心--->"+index);
}
}
paint.reset();
}
}
for(int i = 0;i<points.length;i++){
if(points[i].isSelect){
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(outer_stork_size);
paint.setColor(Color.CYAN);
canvas.drawCircle(points[i].centerX,points[i].centerY,outer_size,paint);
paint.reset();
}
if(isStorkInnerCircle&&points[i].isSelect){
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(2);
canvas.drawCircle(points[i].centerX,points[i].centerY,inner_size,paint);
paint.reset();
}else{
paint.setColor(Color.GREEN);
canvas.drawCircle(points[i].centerX,points[i].centerY,inner_size,paint);
}
}
}
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
</pre><pre name="code" class="java">
下面是每个点的信息和代码
<pre name="code" class="java">package jack.com.mypoint;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
/**
* Created by Jack on 2014/8/20.
*/
public class Point {
public int preX;
public int preY;
public int centerX;
public int centerY;
private int innerRadio;
private int storkRadio;
public boolean isSelect = false;//默认未选中
public int moveX;
public int moveY;
public Point setPosition(int centerX,int centerY){
this.centerX = centerX;
this.centerY = centerY;
return this;
}
public void setRadioSize(int innerRadio,int storkRadio){
this.innerRadio = innerRadio;
this.storkRadio = storkRadio;
}
public RectF getPointRect(){
return new RectF(centerX-40,centerY-40,centerX+40,centerY+40);
}
public void drawLine(Canvas canvas,Paint paint,Point point){
canvas.drawLine(point.centerX,point.centerY,moveX,moveY,paint);
}
}
好了,这样简单的九个点点就出来了,具体怎么运用看要求了