欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

图形解锁的代码实现---转换注释,图形解锁---注释,package hong

来源: javaer 分享于  点击 19877 次 点评:4

图形解锁的代码实现---转换注释,图形解锁---注释,package hong


package hong.specialEffects.wight;import hong.specialEffects.R;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Cap;import android.graphics.Typeface;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;public class NinePointLineView extends View {    Paint linePaint = new Paint();    Paint whiteLinePaint = new Paint();    Paint textPaint = new Paint();    Bitmap defaultBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.lock);    int defaultBitmapRadius = defaultBitmap.getWidth() / 2;    Bitmap selectedBitmap = BitmapFactory.decodeResource(getResources(),            R.drawable.indicator_lock_area);    int selectedBitmapDiameter = selectedBitmap.getWidth();    int selectedBitmapRadius = selectedBitmapDiameter / 2;    PointInfo[] points = new PointInfo[9];    //    PointInfo startPoint = null;    //    int width, height;    //    int moveX, moveY;    //    boolean isUp = false;    //    StringBuffer lockString = new StringBuffer();    public NinePointLineView(Context context) {        super(context);        this.setBackgroundColor(Color.WHITE);        initPaint();    }    public NinePointLineView(Context context, AttributeSet attrs) {        super(context, attrs);        this.setBackgroundColor(Color.WHITE);        initPaint();    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        //        width = getWidth();        height = getHeight();        if (width != 0 && height != 0) {            initPoints(points);        }        super.onMeasure(widthMeasureSpec, heightMeasureSpec);    }    @Override    protected void onLayout(boolean changed, int left, int top, int right,            int bottom) {        super.onLayout(changed, left, top, right, bottom);    }    private int startX = 0, startY = 0;    @Override    protected void onDraw(Canvas canvas) {        canvas.drawText("用户的滑动顺序:" + lockString, 0, 40, textPaint);        if (moveX != 0 && moveY != 0 && startX != 0 && startY != 0) {            //  drawLine(canvas, startX, startY, moveX, moveY);        }        drawNinePoint(canvas);        invalidate();        super.onDraw(canvas);    }    //  //    @Override    public boolean onTouchEvent(MotionEvent event) {        boolean flag = true;        if (isUp) {//            finishDraw();            //            flag = false;        } else {//            handlingEvent(event);            //            flag = true;        }        return flag;    }    private void handlingEvent(MotionEvent event) {        switch (event.getAction()) {        case MotionEvent.ACTION_MOVE:            moveX = (int) event.getX();            moveY = (int) event.getY();            for (PointInfo temp : points) {                if (temp.isInMyPlace(moveX, moveY) && temp.isNotSelected()) {                    temp.setSelected(true);                    startX = temp.getCenterX();                    startY = temp.getCenterY();                    int len = lockString.length();                    if (len != 0) {                        int preId = lockString.charAt(len - 1) - 48;                        points[preId].setNextId(temp.getId());                    }                    lockString.append(temp.getId());                    break;                }            }            invalidate(0, height - width, width, height);            break;        case MotionEvent.ACTION_DOWN:            int downX = (int) event.getX();            int downY = (int) event.getY();            for (PointInfo temp : points) {                if (temp.isInMyPlace(downX, downY)) {                    temp.setSelected(true);                    startPoint = temp;                    startX = temp.getCenterX();                    startY = temp.getCenterY();                    lockString.append(temp.getId());                    break;                }            }            invalidate(0, height - width, width, height);            break;        case MotionEvent.ACTION_UP:            startX = startY = moveX = moveY = 0;            isUp = true;            invalidate();            break;        default:            break;        }    }    private void finishDraw() {        for (PointInfo temp : points) {            temp.setSelected(false);            temp.setNextId(temp.getId());        }        lockString.delete(0, lockString.length());        isUp = false;        invalidate();    }    private void initPoints(PointInfo[] points) {        int len = points.length;        int seletedSpacing = (width - selectedBitmapDiameter * 3) / 4;        //        int seletedX = seletedSpacing;        int seletedY = height - width + seletedSpacing;        //        int defaultX = seletedX + selectedBitmapRadius - defaultBitmapRadius;        int defaultY = seletedY + selectedBitmapRadius - defaultBitmapRadius;        //        for (int i = 0; i < len; i++) {            if (i == 3 || i == 6) {                seletedX = seletedSpacing;                seletedY += selectedBitmapDiameter + seletedSpacing;                defaultX = seletedX + selectedBitmapRadius                        - defaultBitmapRadius;                defaultY += selectedBitmapDiameter + seletedSpacing;            }            points[i] = new PointInfo(i, defaultX, defaultY, seletedX, seletedY);            seletedX += selectedBitmapDiameter + seletedSpacing;            defaultX += selectedBitmapDiameter + seletedSpacing;        }    }    private void initPaint() {        initLinePaint(linePaint);        initTextPaint(textPaint);        initWhiteLinePaint(whiteLinePaint);    }    /**     * * @param paint     */    private void initTextPaint(Paint paint) {        textPaint.setTextSize(30);        textPaint.setAntiAlias(true);        textPaint.setTypeface(Typeface.MONOSPACE);    }    /**     *   *     * @param paint     */    private void initLinePaint(Paint paint) {        paint.setColor(Color.GRAY);        paint.setStrokeWidth(defaultBitmap.getWidth());        paint.setAntiAlias(true);        paint.setStrokeCap(Cap.ROUND);    }    /**     * *     * @param paint     */    private void initWhiteLinePaint(Paint paint) {        paint.setColor(Color.WHITE);        paint.setStrokeWidth(defaultBitmap.getWidth() - 5);        paint.setAntiAlias(true);        paint.setStrokeCap(Cap.ROUND);    }    /**     *     *     * @param canvas     */    private void drawNinePoint(Canvas canvas) {        if (startPoint != null) {            drawEachLine(canvas, startPoint);        }        //        for(PointInfo pointInfo : points) {            if (pointInfo.isSelected()) {//                canvas.drawBitmap(selectedBitmap, pointInfo.getSeletedX(),pointInfo.getSeletedY(), null);            }            //                     canvas.drawBitmap(defaultBitmap, pointInfo.getDefaultX(),pointInfo.getDefaultY(), null);        }    }    /**     *   *     * @param canvas     * @param point     */    private void drawEachLine(Canvas canvas, PointInfo point) {        if (point.hasNextId()) {            int n = point.getNextId();            drawLine(canvas, point.getCenterX(), point.getCenterY(),                    points[n].getCenterX(), points[n].getCenterY());            //            drawEachLine(canvas, points[n]);        }    }    /**     *     *     * @param canvas     * @param startX     * @param startY     * @param stopX     * @param stopY     */    private void drawLine(Canvas canvas, float startX, float startY,            float stopX, float stopY) {        canvas.drawLine(startX, startY, stopX, stopY, linePaint);        canvas.drawLine(startX, startY, stopX, stopY, whiteLinePaint);    }    /**     * 用来表示丿&#1578;炿   *     * @author zkwlx     *     */    private class PointInfo {        //        private int id;        //        private int nextId;        //             private boolean selected;        //        private int defaultX;        //        private int defaultY;        //        private int seletedX;        //        private int seletedY;        public PointInfo(int id, int defaultX, int defaultY, int seletedX,                int seletedY) {            this.id = id;            this.nextId = id;            this.defaultX = defaultX;            this.defaultY = defaultY;            this.seletedX = seletedX;            this.seletedY = seletedY;        }        public boolean isSelected() {            return selected;        }        public boolean isNotSelected() {            return !isSelected();        }        public void setSelected(boolean selected) {            this.selected = selected;        }        public int getId() {            return id;        }        public int getDefaultX() {            return defaultX;        }        public int getDefaultY() {            return defaultY;        }        public int getSeletedX() {            return seletedX;        }        public int getSeletedY() {            return seletedY;        }        public int getCenterX() {            return seletedX + selectedBitmapRadius;        }        public int getCenterY() {            return seletedY + selectedBitmapRadius;        }        public boolean hasNextId() {            return nextId != id;        }        public int getNextId() {            return nextId;        }        public void setNextId(int nextId) {            this.nextId = nextId;        }        /**         *         *         * @param x         * @param y         * @return         */        public boolean isInMyPlace(int x, int y) {            boolean inX = x > seletedX                    && x < (seletedX + selectedBitmapDiameter);            boolean inY = y > seletedY                    && y < (seletedY + selectedBitmapDiameter);            return (inX && inY);        }    }}//该片段来自于http://byrx.net
相关栏目:

用户点评