美文网首页
安卓画百分比扇形

安卓画百分比扇形

作者: 陈陈_04d0 | 来源:发表于2020-07-03 15:30 被阅读0次

public class testViewextends View {

private Paintpaint;

    private int view_style;

    private int view_color;

    private int view_height;

    private int view_width;

    private int progerss =0;

    private int mAnimateValue =0;

    private ValueAnimatoranimator;

    private RectFmRectF;

    private int[]clor = {Color.RED, Color.BLUE, Color.YELLOW, Color.BLACK};

    private int[]angel = {200, 40, 20, 10};

    public testView(Context context) {

this(context, null);

    }

public testView(Context context, @Nullable AttributeSet attrs) {

this(context, attrs, 0);

    }

public testView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

        initAttrs(attrs);

        initPaint();

        start();

    }

@Override

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

// super.onMeasure(widthMeasureSpec, heightMeasureSpec);

//检查高宽

        view_width =resolveSize(view_width, widthMeasureSpec);

        view_height =resolveSize(view_height, heightMeasureSpec);

        setMeasuredDimension(view_width, view_height);

    }

@Override

    protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

        //圆形角度顺时针0 、 90 、270 、180 、360  startAngle 目标角度  useCenter 中心开始画 true 一般用来画扇形

        Log.e("canvas", "canvas");

        int i =0;

        float start =270f;

        for (int paintColor :clor) {

paint.setColor(paintColor);

            float end =angel[i] *1.0f /270 *360;

            canvas.drawArc(mRectF, start, end, true, paint);

            start += end;

            i++;

        }

}

public void initPaint() {

paint =new Paint();

        paint.setAntiAlias(true);

        //画笔颜色

        paint.setColor(view_color);

        // 设置空心

//    paint.setStyle(Paint.Style.STROKE);

        mRectF =new RectF(0, 0, view_width, view_height);

    }

public void initAttrs(AttributeSet attrs) {

TypedArray array = getContext().obtainStyledAttributes(attrs, R.styleable.testView);

        view_color = array.getColor(R.styleable.testView_view_color, Color.BLUE);

        view_style = array.getColor(R.styleable.testView_view_style, 0);

        view_width = array.getDimensionPixelSize(R.styleable.testView_view_height, getContext().getResources().getDimensionPixelOffset(R.dimen.x50));

        view_height = array.getDimensionPixelSize(R.styleable.testView_view_height, getContext().getResources().getDimensionPixelOffset(R.dimen.x50));

        array.recycle();

    }

public void setProgerss(int pro) {

progerss = pro;

        invalidate();

    }

//设置宽

    public void setWidth(int size) {

view_width = size;

        //重新绘制高度 onMeasure、onLayout、onDraw(view位置改变会调用)

        requestLayout();

    }

private ValueAnimator.AnimatorUpdateListenermUpdateListener =new ValueAnimator.AnimatorUpdateListener() {

@Override

        public void onAnimationUpdate(ValueAnimator animation) {

//监听动画根据设置的值来决定

            mAnimateValue = (int) animation.getAnimatedValue();

            //非UI postInvalidate();

//刷新重绘试图UI

//  invalidate();

        }

};

    public void start() {

if (animator ==null) {

animator = ValueAnimator.ofInt(0, 360);

            animator.addUpdateListener(mUpdateListener);

            animator.setRepeatMode(ValueAnimator.RESTART);

            animator.setDuration(6000);

            animator.start();

        }else if (!animator.isStarted()) {

animator.start();

        }

}

public void stop() {

if (animator !=null) {

animator.removeUpdateListener(mUpdateListener);

            animator.removeAllUpdateListeners();

            animator.cancel();

            animator =null;

        }

}

}

相关文章

  • 安卓画百分比扇形

    public class testViewextends View { private Paintpaint; ...

  • 动态曲线,K线

    安卓大部分图库,如曲线,扇形图,矩形图,都是基于 MPAndroidChart 进行开发。此项目暂未采用。 单独l...

  • 布局

    今天学习了安卓的四种布局方式 线性布局 相对布局 帧布局 百分比布局

  • iOS画饼图

    扇形易画,扇形的中心点不易找。 找扇形中心点的算法分析 ****注意****:此找扇形中点算法,是从-π/2开始画...

  • 前端页面适配

    为啥需要适配 安卓 IOS 各种不同的屏幕尺寸 适配方案 基本上都会设置 viewport 百分比:width, ...

  • canvas画饼图(2)

    两个步骤: 第一步画一个扇形 第二步把扇形画满360° 来看第一个步骤,怎么画扇形? 看下面的示意图 要画扇形图,...

  • 安卓百分比布局

    1. Recycle机制 原理便是维护一个对象池,将不再使用但是可能再次使用的对象引用保留在这个对象池里,下次需要...

  • 安卓开发 开发前你需要了解的一些资料(一)

    前言   在安卓开发 初步了解安卓和配置安卓环境中,我们简单的介绍了安卓和配置安卓环境。我们使用了Android ...

  • 安卓自定义View-画圆

    效果图 代码 安卓开发入门教程系列汇总 安卓发展历程及前景 安卓发展历程 安卓开发前景展望 初探安卓 安装开发工...

  • 安卓动画样例-圆环变多变少

    效果图 代码 安卓开发入门教程系列汇总 安卓发展历程及前景 安卓发展历程 安卓开发前景展望 初探安卓 安装开发工...

网友评论

      本文标题:安卓画百分比扇形

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