MicroscopeKnobView.java 文件源码

java
阅读 22 收藏 0 点赞 0 评论 0

项目:MicroscropeKnob 作者:
@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    float mx = this.getWidth()/2;
    float my = this.getHeight()/2;
    float r = getBaseRadius();
    int d = 0;
    float velocity = (value - valueOld1);
    for (d = depth; d > 0; d--) {
        Paint p = new Paint(knobColour);
        int colour = p.getColor();
        int green = (colour & 0x0000FF00) >> 8;
        green += d * 10;
        colour = (colour & 0xFFFF00FF) | ((green << 8) & 0x0000FF00);
        p.setColor(colour);
        float R = r*d;
        float Rsub = r*d-r;
        if (d == 1) {
            Rsub = (float) (r*(d-0.75));
        }
        canvas.drawCircle(0, my, R, p);
        Path arc = null;
        float radVelocity = (float) (Math.abs(velocity) * Math.pow(power, d));
        radVelocity = radVelocity/16;
        radVelocity = Math.min(10f/360f*2f*(float)Math.PI, radVelocity);
        radVelocity = Math.max(1.0f/Rsub, radVelocity); // minimum size
        radVelocity = radVelocity/2;
        float alpha = (float) ((0.7f/Rsub / radVelocity));
        alpha = Math.min(1.0f, alpha);
        if (arcs) {
            arc = new Path();
            float lx1 = (float) ((R-10)*Math.cos(-radVelocity));
            float ly1 = (float) ((R-10)*Math.sin(-radVelocity));
            float lxSub1 = (float) ((Rsub+10)*Math.cos(-radVelocity));
            float lySub1 = (float) ((Rsub+10)*Math.sin(-radVelocity));

            float lx2 = (float) ((R-10)*Math.cos(radVelocity));
            float ly2 = (float) ((R-10)*Math.sin(radVelocity));
            float lxSub2 = (float) ((Rsub+10)*Math.cos(radVelocity));
            float lySub2 = (float) ((Rsub+10)*Math.sin(radVelocity));
            arc.moveTo(lxSub1, lySub1);
            arc.lineTo(lx1, ly1);
            arc.lineTo(lx2, ly2);
            arc.lineTo(lxSub2, lySub2);
            arc.close();
            arc.setFillType(FillType.EVEN_ODD);
        }
        canvas.save();
        canvas.rotate(value * 360.0f * ((float) Math.pow(power, d)) / 2 / (float) Math.PI, 0, my);
        Paint marksC = new Paint(marksColour);
        marksC.setAlpha((int)(alpha * 255));
        for (float a = 0; a < 359.8; a += 10f) {
            canvas.save();
            canvas.rotate(a, 0, my);
            canvas.translate(0, my);
            if (arcs) {
                canvas.drawPath(arc, marksC);
            }
            else {
                canvas.drawLine(Rsub, 0, R, 0, marksC);
            }
            canvas.restore();
        }
        canvas.restore();
    }
    canvas.drawText("Value :" + value, 0, this.getHeight(), textColour);
    if (value != valueOld1) {
        valueOld1 = value;
        this.invalidate();
    }
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号