Android 图像自动调整大小

Android 图像自动调整大小,android,xamarin.android,android-canvas,android-drawable,autoresize,Android,Xamarin.android,Android Canvas,Android Drawable,Autoresize,使用Xamarin编程android,我需要在画布上显示两幅32x32像素尺寸的图像。我一直在使用Android SDK Emulator在xhdpi屏幕上测试代码,图像似乎自动调整大小,使其尺寸加倍。i、 e.它们变得宽64像素,高64像素。然后,我用mdpi屏幕创建了另一个AVD,图像似乎大小正确 我在和其他网站上读过关于密度无关像素的文章,但似乎不明白为什么图像尺寸会自动调整。是否有一个隐含的调整发生在幕后?如果是这样的话,为什么android开发者在他们的文档中不提到它呢?还有什么我需要

使用Xamarin编程android,我需要在
画布上显示两幅32x32像素尺寸的图像。我一直在使用Android SDK Emulator在
xhdpi
屏幕上测试代码,图像似乎自动调整大小,使其尺寸加倍。i、 e.它们变得宽64像素,高64像素。然后,我用
mdpi
屏幕创建了另一个AVD,图像似乎大小正确

我在和其他网站上读过关于密度无关像素的文章,但似乎不明白为什么图像尺寸会自动调整。是否有一个隐含的调整发生在幕后?如果是这样的话,为什么android开发者在他们的文档中不提到它呢?还有什么我需要安排的吗?下面是代码的相关部分(正在调整大小的图像是jp1、jp2等):

Paint bkgBmpPaint=new Paint();颜色myColor=新颜色();
绘制myTextPaint=新绘制();
私有整数a=0,b=0,bw=0;
私有位图partialBitmap=null;
DisplayMetrics dm=新的DisplayMetrics();
私有位图jp1、jp2、jp3、jp4;
公共MyCanvasPath(上下文):基(上下文)//构造函数
{
partialBitmap=Bitmap.CreateBitmap(Resources.Configuration.screenwidtdp、Resources.Configuration.ScreenHeightDp、Bitmap.Config.argb888);
浮动比例=Resources.DisplayMetrics.Density;
jp1=BitmapFactory.DecodeResource(Resources,Resource.Drawable.jp1);
jp2=BitmapFactory.DecodeResource(Resources,Resource.Drawable.jp2);
jp3=BitmapFactory.DecodeResource(Resources,Resource.Drawable.jp3);
jp4=BitmapFactory.DecodeResource(Resources,Resource.Drawable.jp4);
Canvas myCanvas=newcanvas(partialBitmap);b=myCanvas.Height;a=myCanvas.Width;bw=jp1.Width;
IList pImgList=新列表{
jp1,jp2,jp3,jp4};
imgCount=pImgList.Count;
对于(int x=0;x
我在android文档和其他网站上读到了密度无关的像素,但似乎不明白为什么图像尺寸会自动调整

问题在于[BitmapFactory.DecodeResource(Resources res,int id)](,int))。这种方法依赖于密度。默认情况下,它将使用设备/模拟器的密度。您正在使用两个不同密度的模拟器进行测试。因此,该方法创建具有不同维度的位图

解决方案: 为了避免此问题,您应该使用此方法的其他版本:[decodeResource(Resources res,int id,BitmapFactory.Options opts)](,int,android.graphics.BitmapFactory.Options)),并将
opts.Indensity
设置为固定值,例如:

var option = new BitmapFactory.Options();
option.InDensity = 320;
jp1 = BitmapFactory.DecodeResource(Resources, Resource.Drawable.Icon,option);
jp2 = BitmapFactory.DecodeResource(Resources, Resource.Drawable.Icon,option);
jp3 = BitmapFactory.DecodeResource(Resources, Resource.Drawable.Icon,option);
jp4 = BitmapFactory.DecodeResource(Resources, Resource.Drawable.Icon,option);

问题解决了吗?是的,非常感谢。附言:我母亲住院了,因此反应迟钝。没关系。祝你母亲早日康复。
var option = new BitmapFactory.Options();
option.InDensity = 320;
jp1 = BitmapFactory.DecodeResource(Resources, Resource.Drawable.Icon,option);
jp2 = BitmapFactory.DecodeResource(Resources, Resource.Drawable.Icon,option);
jp3 = BitmapFactory.DecodeResource(Resources, Resource.Drawable.Icon,option);
jp4 = BitmapFactory.DecodeResource(Resources, Resource.Drawable.Icon,option);