原因:如下圖所示,這個方法已經在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都繪製