在我的项目中,新闻Feed中有多个图片。我希望ImageView中的图像应该以一种应该是中心裁剪的方式显示,并且图像的上半部分始终可见。
您可以参考下面的屏幕截图,其中在image1中使用中心裁剪显示图像,图像的上半部分不可见:
在中心裁剪中显示图像的图像2以及图像的上半部分也是可见的:
我想要ImageView的第二种图像类型。 如果有人可以帮助我,请提供解决方案。 提前谢谢。
答案 0 :(得分:3)
是的,他们真的需要一种比例类型的“适合”或“作物”,然后是引力:“中心”,“顶部”,“开始”等。但是现在我们必须这样做:
首先,将您的ImageView
设置为按矩阵缩放:
<ImageView
...
android:scaleType="matrix"/>
然后你必须在代码中执行:
private Matrix mMatrix = new Matrix();
...
final ImageView imageView = (ImageView) findViewById(R.id.imageView);
// Using the view tree observer to make sure the ImageView
// is laid out so we have a valid width and height.
// You don't have to do this if you know your ImageView is already
// laid out when the image bitmap is fetched.
imageView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// I had a preset bitmap on the view so I used this
// Just get the actual dimensions of the bitmap
float iw = imageView.getDrawable().getIntrinsicWidth();
float ih = imageView.getDrawable().getIntrinsicHeight();
// Get the dimensions of the view
float vw = imageView.getWidth();
float vh = imageView.getHeight();
// Compute the scale factors
float scaleW = vw / iw;
float scaleH = vh / ih;
// For a crop, we take the largest scale factor
float scale = Math.max(scaleW, scaleH);
// First, center the image horizontally
mMatrix.setTranslate((vw - iw) / 2, 0);
// Then scale the image from horizontal center & vertical top
mMatrix.postScale(scale, scale, vw / 2, 0);
imageView.setImageMatrix(mMatrix);
}
});