【发布时间】:2021-05-25 08:41:33
【问题描述】:
我想在显示图像之前以特定方式缩放和裁剪图像 - 取决于其初始尺寸及其宽度和高度比例。最后,我希望图像填满整个可用屏幕。
以下是缩放和裁剪需要遵循的规则:
-
如果图像的宽度大于高度: a) 放大或缩小图像的高度以匹配屏幕的高度,但保持图像的初始宽度/高度比。 b) 在屏幕中居中图像。 c) 对称裁剪两边多余的宽度空间以匹配屏幕的宽度。
-
如果图像的宽度小于其高度: a) 放大或缩小图像的宽度以匹配屏幕的宽度,但保持图像的初始宽度/高度比。 b) 在屏幕中居中图像。 c) 对称裁剪两边多余的高度空间以匹配屏幕的高度。
我的意图是通过拉伸或收缩尺寸来填充整个屏幕,当与屏幕尺寸匹配时会导致其他图像尺寸超过屏幕尺寸,然后应该居中并对称裁剪。
我当前的代码使任何图像填满屏幕,但它没有保持原始的宽度/高度比,这会导致失真。 下面我给出相关代码:
Bitmap bmImg;
String[] PathsArray;
int numb_paths=0;
int position = 0;
ImageView imageView;
ViewFlipper flipper;
PathsArray = imagesPaths.split("\n");
numb_paths = PathsArray.length;
bmImg = BitmapFactory.decodeFile(PathsArray[position]);
imageView = new ImageView(displayImagesShow.this);
flipper = findViewById(R.id.flipper);
Resources r = getResources();
layers[0] = new BitmapDrawable(getResources(), bmImg);
layers[1] = r.getDrawable(R.drawable.flowers_frame1);
Drawable[] layers = new Drawable[2];
LayerDrawable layerDrawable = new LayerDrawable(layers);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageDrawable(layerDrawable);
ViewFlipper.LayoutParams lp =
new ViewFlipper.LayoutParams
(ViewFlipper.LayoutParams.MATCH_PARENT,
ViewFlipper.LayoutParams.MATCH_PARENT);
imageView.setLayoutParams(lp);
flipper.addView(imageView);
【问题讨论】:
标签: android image scale crop rules