zoukankan      html  css  js  c++  java
  • 关于界面绘制过程多次回调ondraw()方法产生的问题

    最近项目中,出现一个问题,要做成的效果是这样的,但是一进去就变成这样了,

    后来发现,刚进去是正常的,一闪而过,就变成全部了。

    界面绘制过程,ondraw() 会被多次回调。

    就是说在第一次绘制的时候是可以的,后面的绘制出现了问题,后来发现绘制轨道和阴影渐变色用的是同一个paint对象,

    猜测是paint对象的属性被设置过了。果然是第一次设置了阴影颜色之后,第二次绘制时属性还在,于是绘制进度条轨道

    @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
    
            int centre = getWidth() / 2; 
            int radius = (int) (centre - roundWidth / 2); 
            
            paint.setColor(getResources().getColor(R.color.proessround));
            paint.setStyle(Paint.Style.STROKE);
       paint.setStrokeWidth(roundWidth); paint.setAntiAlias(
    true);
        //关键语句:设置进度条轨道时应该设置背景色为空
    paint.setShader(
    null); canvas.drawCircle(centre, centre, radius, paint); paint.setStrokeWidth(0); paint.setColor(textColor); paint.setTextSize(textSize); paint.setTypeface(Typeface.DEFAULT_BOLD); int percent = (int) (((float) progress / (float) max) * 100); float textWidth = paint.measureText(percent + "%"); if (textIsDisplayable && percent != 0 && style == STROKE) { canvas.drawText(percent + "%", centre - textWidth / 2, centre + textSize / 2, paint); } paint.setStrokeWidth(roundWidth); // paint.setColor(roundProgressColor); int[] mColors = new int[] {// 渐变色数组 0xFF0da7ff, 0xFF31da41, 0xFF31da41, 0xFF0da7ff ,0xFF0da7ff }; Shader sg = new SweepGradient(0, 0, mColors, null); SweepGradient sg2 = new SweepGradient(centre, centre, getResources() .getColor(R.color.proessstartcolor), getResources().getColor( R.color.proessendcolor)); paint.setShader(sg); RectF oval = new RectF(centre - radius, centre - radius, centre + radius, centre + radius); switch (style) { case STROKE: { Log.e("zhang", centre+"调试1:"+radius); paint.setStyle(Paint.Style.STROKE); canvas.drawArc(oval, -90, 360 * progress / max, false, paint); break; } case FILL: { Log.e("zhang", "调试2:"+360 * progress / max); paint.setStyle(Paint.Style.FILL_AND_STROKE); if (progress != 0) canvas.drawArc(oval, 0, 360 * progress / max, true, paint); break; } } }

    时就出现了背景色。

  • 相关阅读:
    自行车平衡原理
    自行车为什么前轮和后轮受到的摩擦力相反呢 自行车前轮后轮转动方向一样 自行车运动原理
    UltraCompare文件内容比较工具
    msvcp100d.dll文件丢失,解决找不到msvcp100d.dll的问题
    mfc对话框
    bzoj 2298: [HAOI2011]problem a
    9.2python操作redis
    9.1 mysql+centos7+主从复制
    9,Linux下的python3,virtualenv,Mysql、nginx、redis安装配置
    8,Linux系统基础优化及常用命令
  • 原文地址:https://www.cnblogs.com/Jackie-zhang/p/5210436.html
Copyright © 2011-2022 走看看