原因:如下图所示,这个方法已经在API21废弃了,官方说明,开启硬件加速后,不需要关注脏区域;在21以上版本invalidate(Rect)等效于invalidate()全局刷新,并且更推荐使用invalidate();
解决措施:
方法1:开启硬件加速,
方法2:使用clipRect(Rect)方法设置局部绘制
//脏区域自己计算 RectF dirtyRect = new RectF(0,0,50,50); @Override protected void onDraw(Canvas canvas) { if (isTest) { canvas.save(); canvas.clipRect(dirtyRect); canvas.drawRoundRect(new RectF(0, 0, getWidth(), getHeight()), radius, radius, mPaint); canvas.restore(); } }
上述代码在view中只刷新了50x50的区域,并没有整个view都绘制