具體需求是爲生成二維碼,爲二維碼添加背景和logo,添加背景時使用canvas.drawBitmap(bgBm, 0, 0, null),發現在小米手機上背景圖片生成的不完整,但是其他機型都是完整的;
canvas.drawBitmap(bgBm, 0, 0, null)
這種方法對於大部分手機是可行的,但是對於小米的劉海屏手機(mi 8)會出現右邊和下邊的邊框 具體原因不知 可能和小米獲取屏幕高度的時候是自動去除掉底部操作欄的不知道是處於什麼考慮 後來經過一番嘗試,發現另外一種設置bitmap的方法成功適配
解決方案:
Rect src=new Rect(0,0,bgBm.getWidth(),bgBm.getHeight());
canvas.drawBitmap(bgBm,src,src,null);
源碼中:
public void drawBitmap(@NonNull Bitmap bitmap, @Nullable Rect src, @NonNull Rect dst,
@Nullable Paint paint) {
super.drawBitmap(bitmap, src, dst, paint);
}
拿到了對應的bitmap,這時候我們如果要將它繪製在屏幕上,需要創建兩個Rect,其實只要明白了這兩個Rect的意義並會靈活運用就可以做出不少效果;
第一個Rect 代表要繪製的bitmap 區域,第二個 Rect 代表的是要將bitmap 繪製在屏幕的什麼地方
通過Rect來確定區域 然後再來生成bitmap適配