ColorDrawable draw方法的兼容问题

本文针对Android内置ProgressBar在特定系统版本下出现的问题进行了深入探讨,并提供了一种自定义绘制进度条的解决方案,包括如何避免同步锁冲突及兼容低版本系统的绘制技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    android内置的ProgressBar控件里不少的方法充斥着交叉的synchronized锁。很多时候刷进度导致ProgressBar显示不出来,也没见哪里设置隐藏的,估计是锁导致的,浪费时间看源码。android ui的更新本来就限制死在ui线程里,乱加神码锁,脑残!解决问题只能自己画进度条了。

   UI元素比较简单,不需要动画、SecondaryProgress,所以可以简单的按照进度百分比设置一个Drawable的宽度再画在view视图上。实现好后也没发现神码问题,版本上了一段时间偶然才在一台2.3 系统设备上发现所有的进度条是100%的。调试了很长时间,进度、宽度计算都是没有问题的。找来2.3 ColorDrawable的源码才发现它的实现是画满屏宽的。又是个坑,高歌猛进的android挖了多少坑啊。兼容的解决的方法是在绘制时同时用canvas的clipRect方法设置绘制区域即可。

	    mBounds.set(0, 0, width, getMeasuredHeight());
	    mDrawable.setBounds(mBounds);
	    canvas.clipRect(mBounds);
	    mDrawable.draw(canvas);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值