美文网首页iOS学习资料
MyViewDemo之饼状图

MyViewDemo之饼状图

作者: Zhangyuting193 | 来源:发表于2016-07-29 17:49 被阅读67次

作者:张玉庭的博客

今天在空余时间学了一会关于自定义View的实现, 想着以后在MyViewDemo
做一系列的有意思的自定义View。这一次的自定义view实践主要了解一下自定义view的实现过程

  • Demo展示

imageimage
  • 关于View的实现过程

  1. view的测量获取其宽高
  2. view的绘制
  3. view的刷新
  • view的测量获取其宽高

首先自定义一个view--PieChartView并让其继承View,然后重写测量View大小的方法onMeasure()并获取其宽高为绘制图做准备。

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        mWidth = MeasureSpec.getSize(widthMeasureSpec);
        mHeight = MeasureSpec.getSize(heightMeasureSpec);
    }
  • view的绘制

view的绘制主要用到画布Canvas,以及画笔Paint。我们这时重写View的方法onDraw()。首先将画布的圆心移到View的中间(调用 canvas.translate(mWidth / 2, mHeight / 2)),然后获取半径的长度,通过过相关的运算画出两部分不一样的饼状图

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

        canvas.translate(mWidth / 2, mHeight / 2);//饼状图圆心移到中间
        float r = (float) ((Math.min(mWidth, mHeight) / 2));//半径
        RectF rectF = new RectF(-r, -r, r, r);

        //男士的扇形图
        mPaint.setStyle(Paint.Style.FILL);//填充
        mPaint.setColor(Color.CYAN);
        canvas.drawArc(rectF, -90, percent * 360, true, mPaint);

        //女士的扇形图
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setColor(Color.RED);
        canvas.drawArc(rectF, percent * 360 - 90, (1 - percent) * 360, true, mPaint);

    }
  • view的刷新

通过在布局文件调用两个seekbar控件,并通过监听OnSeekBarChangeListener()并调用View的刷新方法
setPercent(float percent),最终调用重新绘制画布的方法invalidate()刷新View;

SeekBar.OnSeekBarChangeListener onSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if (seekBar.getId() == R.id.seekBar) {
                seekBar1.setProgress(progress);
                seekBar2.setProgress(100 - progress);
            } else {
                seekBar2.setProgress(progress);
                seekBar1.setProgress(100 - progress);
            }
            pieChartView.setPercent((float) (1.0 * seekBar2.getProgress() / 100));
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    };

参考:从零起步,从入门到懵逼的自定义View教程

相关文章

  • MyViewDemo之饼状图

    作者:张玉庭的博客 今天在空余时间学了一会关于自定义View的实现, 想着以后在MyViewDemo做一系列的有意...

  • iOS CGContextRef

    一、绘制饼状图 饼状图的简单实现代码:

  • Echarts

    http://echarts.baidu.com/api.html#echarts 柱状图: 饼状图: 饼状图2:...

  • canvas之饼状图

  • 图表

    推荐 Charts框架之雷达图 Charts框架之饼状图 Charts框架之折线图 Charts框架之柱状图 Ch...

  • 饼状图

    最近在重构项目,里面涉及到饼状图,就自己写了个,在这里分享一下:github地址 展示一下效果图: 大致思路如下:...

  • 饼状图

  • 饼状图

  • 饼状图

    1、基础数据 2、饼状图下的{a}{b}{c}{d}{a}:series下的name{b}:series下的dat...

  • Quart2D 画图二 (饼状图、柱状图)

    饼状图 柱状图

网友评论

    本文标题:MyViewDemo之饼状图

    本文链接:https://www.haomeiwen.com/subject/iemzjttx.html