我有两个图像并不总是完全适合屏幕。因此,我想裁剪它们(就像CENTER_CROP一样),但在某种程度上,这样图像的底部区域总是可见的。这两个图像占据了整个屏幕宽度和每个屏幕高度的1/2。
我在这里找到了一个类似的解决方案:ImageView scaling TOP_CROP被接受的解决方案完美地工作,但我不知道如何改变矩阵,使其改为BOTTOM_CROP。
TOP_CROP的工作代码:
setScaleType(ScaleType.MATRIX);
Matrix matrix = getImageMatrix();
float scaleFactor = (getWidth() - Data.getImgPadding(c)) / (float) getDrawable().getIntrinsicWidth();
matrix.setScale(scaleFactor, scaleFactor, 0, 0);
setImageMatrix(matrix);注意:右边的填充是以编程方式设置的,因此它需要包含在计算中(该值由Data.getImgPadding(C)读取)。
对于BOTTOM_CROP,我想我应该使用:
matrix.setScale(scaleFactor, scaleFactor, 0, getHeight());但是它并没有真正起作用,对于第一张图片来说,底部的显示或多或少是正确的,但是在它的下面有一些边距--底部的图片边框应该恰好在ImageView的底部边框。我假设我必须以某种方式使用填充,但我不知道如何计算水平填充设置后的“新”图像高度。
然而,更大的问题是(无论出于什么原因)当我在setScale()中设置值py时,第二个ImageView突然变空了……这两个视图使用相同的布局xml,但这不是原因,因为原始代码在这两个视图上都能完美地工作。
发布于 2015-02-24 12:52:45
我知道这已经过去很久了,但我已经修改了帖子中的答案,以满足您的需要。
@Override
protected boolean setFrame(int l, int t, int r, int b) {
boolean hasChanged = super.setFrame(l, t, r, b);
Matrix matrix = getImageMatrix();
float scaleFactor = getWidth() / (float) getDrawable().getIntrinsicWidth();
matrix.setScale(scaleFactor, scaleFactor, 0, 0);
// The Important Bit
Drawable drawable = getDrawable();
float heightD = drawable.getIntrinsicHeight();
float height = getHeight();
matrix.setTranslate(0, height - heightD);
setImageMatrix(matrix);
return hasChanged;
}希望它能帮上忙!
https://stackoverflow.com/questions/21700509
复制相似问题