android简单的九宫格解锁view

来源:互联网 发布:响应式影视网站建设cms 编辑:程序博客网 时间:2024/05/11 08:56

纯代码绘制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);    }}

好了,这样简单的九个点点就出来了,具体怎么运用看要求了


0 0
原创粉丝点击