Android 如何缩放位图以保持相同的屏幕空间

Android 如何缩放位图以保持相同的屏幕空间,android,bitmap,draw,dpi,Android,Bitmap,Draw,Dpi,我有位图,我需要在运行时调整大小。它的大小必须调整,以便在任何屏幕上都能保持相同的屏幕空间。我试着这样使用dp: private int dpiToPx(int dp) { //return (int)(getResources().getDisplayMetrics().densityDpi * dp / 160f); return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResour

我有位图,我需要在运行时调整大小。它的大小必须调整,以便在任何屏幕上都能保持相同的屏幕空间。我试着这样使用dp:

private int dpiToPx(int dp) {
    //return (int)(getResources().getDisplayMetrics().densityDpi * dp / 160f);
    return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());
}
和缩放位图:

Bitmap b2 = Bitmap.createScaledBitmap (
       b1,
       dpiToPx(225),
       dpiToPx(225),
       true
);
稍后我将使用canvas.drawBitmap()绘制它

我想它会在任何屏幕上产生相同大小的位图。但在320dpi屏幕和720dpi屏幕上的测试结果差别很大


如何修复它?

使用sdp库可能会对您有所帮助


您可以使用它来确定设备的高度和宽度,并在.createScaledBitmap中使用它

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();    
float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();    
float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;