Android invalidate(Rect)局部刷新不生效問題的解決方案

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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章