我知道某些设备无法自动旋转相机拍摄的照片,因此您必须获取相机拍摄时的方向,拍摄照片的时间(链接here,here和here)。
我需要以正确的方向显示所有这些照片的网格(如果需要,可以旋转),使用固定的单元格大小并使用中心裁剪方式
使用中心裁剪不起作用,因为它不允许我使用ScaleType.MATRIX。我只是不知道如何实现它,因为我希望尽可能少地使用内存,我不希望创建额外的位图......
这是我尝试过的,但由于我在这方面相当不高,我不知道如何进一步解决它:
/**
* @param rotationDegree
* degrees to rotate the image, currently should only be any of the values: 0,90,180,270
*/
public static void setImageRotation(final ImageView imageView, final Bitmap bitmap, final int rotationDegree,
final int dstWidth, final int dstHeight) {
final Matrix matrix = new Matrix();
imageView.setScaleType(ScaleType.MATRIX);
matrix.preRotate(rotationDegree, bitmap.getWidth() / 2, bitmap.getHeight() / 2);
matrix.postScale((float) dstWidth / bitmap.getHeight(), (float) dstHeight / bitmap.getWidth());
imageView.setImageMatrix(matrix);
}
我还获得了用于中心裁剪的imageView的android代码,并创建了下一个函数:
public static void prepareCenterCropMatrix(final Matrix matrix, final int srcWidth, final int srcheight,
final int dstWidth, final int dstHeight) {
float scale;
float dx = 0, dy = 0;
if (srcWidth * dstHeight > dstWidth * srcheight) {
scale = (float) dstHeight / (float) srcheight;
dx = (dstWidth - srcWidth * scale) * 0.5f;
} else {
scale = (float) dstWidth / (float) srcWidth;
dy = (dstHeight - srcheight * scale) * 0.5f;
}
matrix.setScale(scale, scale);
matrix.postTranslate((int) (dx + 0.5f), (int) (dy + 0.5f));
}
但无论我如何尝试使用它,它都不起作用。
任何人都可以帮我这个吗?
然而,我仍然想知道在解码时是否有办法解决这个问题。
答案 0 :(得分:0)
尝试以下
imageView.setScaleType(ScaleType.FIT_XY); or imageView.setScaleType(ScaleType.FIT_END);