博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于界面绘制过程多次回调ondraw()方法产生的问题
阅读量:7180 次
发布时间:2019-06-29

本文共 2361 字,大约阅读时间需要 7 分钟。

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

 

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

界面绘制过程,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; } } }

 

时就出现了背景色。

 

转载于:https://www.cnblogs.com/Jackie-zhang/p/5210436.html

你可能感兴趣的文章
IE9是最佳浏览器?
查看>>
快速把web项目部署到weblogic上
查看>>
objcopy
查看>>
RGB_YUV_YCbCr
查看>>
虚拟内存机制
查看>>
一个CSV文件解析类
查看>>
javascript调用C#后台程序执行查询
查看>>
使用MonoTouch进行iOS开发
查看>>
漂亮的蓝色风格网页设计作品欣赏(系列二)
查看>>
Bind和Eval的区别详解
查看>>
血拼2011中国移动开发者大会门票超低价团购!(已结束)
查看>>
Ural_1348. Goat in the Garden 2(计算几何)
查看>>
Mysql学习积累之二[网摘收藏 个人学习参考]
查看>>
[nodejs]Buffer vs String
查看>>
IIS负载均衡-Application Request Route详解第五篇:使用ARR来配置试点项目
查看>>
绿色网站设计作品
查看>>
java设置环境变量
查看>>
POJ 1987 Distance Statistics(树的点分治)
查看>>
[RxJS] Error Handling in RxJS
查看>>
销售订单行上行号LINE_SHIPMENT_OPTION_NUMBER
查看>>