Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不是';我的图像在Android的ImageView中是否设置为正方形?_Android_Imageview_Drawrect_Bitmapimage - Fatal编程技术网

为什么不是';我的图像在Android的ImageView中是否设置为正方形?

为什么不是';我的图像在Android的ImageView中是否设置为正方形?,android,imageview,drawrect,bitmapimage,Android,Imageview,Drawrect,Bitmapimage,我正在尝试将从SD卡检索到的图像设置为48×48dp的ImageView中的正方形。我已经做了下面的编码,但图像仍然设置为矩形。有人能告诉我一步一步怎么做吗 Bitmap bmp = BitmapFactory.decodeFile(f.getAbsolutePath()); Bitmap myBitmap = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Bitmap.Config.ARGB_8888); Paint pa

我正在尝试将从SD卡检索到的图像设置为48×48dp的ImageView中的正方形。我已经做了下面的编码,但图像仍然设置为矩形。有人能告诉我一步一步怎么做吗

  Bitmap bmp = BitmapFactory.decodeFile(f.getAbsolutePath());
  Bitmap myBitmap = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Bitmap.Config.ARGB_8888);
  Paint paint = new Paint();
  Canvas cc = new Canvas(myBitmap);
  cc.drawRect(48,48,48,48, paint);
  frndsimag.setImageBitmap(bmp);

只是猜测一下,但是
ImageView
frndsimag
可能只是矩形,显示的图像会拉伸以填充空间

很难说没有看到布局xml,但是您可以尝试更改
frndsimag
scaleType
-

frndsimag.setScaleType(ScaleType.CENTER);

我发现这段代码有两个问题。首先,您将传递到ImageView原始位图
bmp
,而不是
myBitmap
。其次,新位图的大小与原始位图相同。如果没有为ImageView设置android:scaleType,它将使用相同的空间量

为了实现你的目标,我将做以下几点。假设您在XML布局中定义ImageView,请将
android:width
android:height
设置为48dp和
android:scaleType=fitXY
以填充整个空间或
centerInside
,如果您希望保持原始比例

然后您的代码可以压缩为:

Bitmap bmp = BitmapFactory.decodeFile(f.getAbsolutePath());
frndsimag.setImageBitmap(bmp);

如果您的图像很大,最好使用本页中的优化技术

请将您的xml文件发布到android上:scaleType=“centerCrop”。