487_动态修改的复杂进度

来源:互联网 发布:网络视频管理系统 编辑:程序博客网 时间:2024/05/17 23:42




动态修改的复杂进度




    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(totalWidth, totalHeight);
    }


    public void reDraw(int day) {
        this.day = day;
        this.invalidate();
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);


        //左边距离10dp
        alreadyLength = dp10;
        whitePosition = 0;
        whitePercent = 0;


        //创建线的bitmap
        Bitmap lineBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic_goldline_disabled);
        Bitmap line = BitmapUtil.zoomImage(lineBitmap, dp55, dp4);


        //创建点的bitmap
        Bitmap pointBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_goldpoint_disabled);
        Bitmap point = BitmapUtil.zoomImage(pointBitmap, dp30, dp26);


        //拿到白点位置和白色百分比
        whitePosition = getWhitePosition(day);
        whitePercent = getWhitePercent(day, whitePosition);


        //画点和线
        for (int i = 1; i <= 11; i++) {
            if (i % 2 != 0) {
                //画点,小于whitePosition,都是白的,比如是5,那么1,3都是白的
                drawPoint(canvas, point, whitePosition, i);
            } else {
                //画线
                drawLine(canvas, line, whitePosition, i);
            }
        }
    }


    private void drawPoint(Canvas canvas, Bitmap point, int whitePosition, int i) {
        if (whitePosition >= i) {
            //画白点
            Bitmap whitePointBitmap;
            if (i == 11) {
                whitePointBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_rigoldpoint_pressed);
            } else {
                whitePointBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_legoldpoint_pressed);
            }
            Bitmap whitePoint = BitmapUtil.zoomImage(whitePointBitmap, dp30, dp26);
            canvas.drawBitmap(whitePoint, alreadyLength, 0, paint);
            alreadyLength = alreadyLength + dp30;
        } else {
            //画黄点
            canvas.drawBitmap(point, alreadyLength, 0, paint);
            alreadyLength = alreadyLength + dp26;
        }
    }


    public void drawLine(Canvas canvas, Bitmap line, int whitePosition, int i) {
        Bitmap whiteLineBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic_goldline_pressed);
        Bitmap whiteLine = BitmapUtil.zoomImage(whiteLineBitmap, dp55, dp4);
        if (i < whitePosition) {
            //全白线
            canvas.drawBitmap(whiteLine, alreadyLength, dp11, paint);
            alreadyLength = alreadyLength + dp55;
        } else {
            canvas.drawBitmap(line, alreadyLength, dp11, paint);
            if (whitePercent > 0) {
                Bitmap partWhiteLine = Bitmap.createBitmap(whiteLine, 0, 0, (int) (dp55 * whitePercent), dp4);
                canvas.drawBitmap(partWhiteLine, alreadyLength, dp11, paint);
                whitePercent = 0;
            }
            alreadyLength = alreadyLength + dp55;
        }
    }


    private int getWhitePosition(int day) {
        if (day >= 1 && day < 3) {
            return 1;
        } else if (day >= 3 && day < 5) {
            return 3;
        } else if (day >= 5 && day < 7) {
            return 5;
        } else if (day >= 7 && day < 15) {
            return 7;
        } else if (day >= 15 && day < 25) {
            return 9;
        } else if (day >= 25) {
            return 11;
        }
        return 0;
    }


    private double getWhitePercent(int day, int whitePosition) {
        double percent = 0;


        switch (whitePosition) {
            case 0:
                percent = 0;
                break;
            case 1:
                percent = (day - 1) / 2d;
                break;
            case 3:
                percent = (day - 3) / 2d;
                break;
            case 5:
                percent = (day - 5) / 2d;
                break;
            case 7:
                percent = (day - 7) / 8d;
                break;
            case 9:
                percent = (day - 15) / 10d;
                break;
            case 11:
                percent = 0;
                break;
        }


        return percent;
    }





0 0
原创粉丝点击