您的位置:首页 > 移动开发 > 微信开发

Android仿微信聊天图片缩略图裁剪

2015-11-04 19:32 756 查看
本文地址:http://blog.csdn.net/Jaden_hool/article/details/49642297

效果图

1、横图原图:



横图聊天界面缩略图:



2、竖图原图:



竖图聊天界面缩略图:



3、聊天界面效果图:



一、首先要明确,”ImageView控件的大小“ 和 “用src属性设置的图片的大小”并不是一个概念,可以通过设置scaleType属性实现想要的效果。借用别的大神做的一张图简单介绍一下scaleType属性:



常量

public static final ImageView.ScaleType CENTER

在视图中使图像居中,不执行缩放。

在 XML 中可以使用的语法: android:scaleType=”center”。

public static final ImageView.ScaleType CENTER_CROP

均衡的缩放图像(保持图像原始比例),使图片的两个坐标(宽、高)都大于等于 相应的视图坐标(负的内边距)。图像则位于视图的中央。

在 XML 中可以使用的语法:android:scaleType=”centerCrop”。

public static final ImageView.ScaleType CENTER_INSIDE

均 衡的缩放图像(保持图像原始比例),使图片的两个坐标(宽、高)都小于等于 相应的视图坐标(负的内边距)。图像则位于视图的中央。

在 XML 中可以使用的语法:android:scaleType=”centerInside”。

public static final ImageView.ScaleType FIT_CENTER

使用 CENTER 方式缩放图像。

在 XML 中可以使用的语法: android:scaleType=”fitCenter”。

public static final ImageView.ScaleType FIT_END

使用 END 方式缩放图像。

在 XML 中可以使用的语法: android:scaleType=”fitEnd”。

public static final ImageView.ScaleType FIT_START

使用 START 方式缩放图像。

在 XML 中可以使用的语法:android:scaleType=”fitStart”。

public static final ImageView.ScaleType FIT_XY

使 用 FILL 方式缩放图像。

在 XML 中可以使用的语法: android:scaleType=”fitXY”。

public static final ImageView.ScaleType MATRIX

绘制时,使用图像矩阵方式缩放。图像矩阵可以通过 setImageMatrix(Matrix) 设置。在 XML 中可以使用的语法: android:scaleType=”matrix”。(此部分内容为转载)

public class ImageSize {

private int width;
private int height;
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}

}


二、根据以下方法得到ImageView控件的大小,但是图片的实际大小并不需要改变。

public static ImageSize getImageSize(Bitmap bitmap) {
ImageSize imageSize = new ImageSize();
if (null == bitmap || bitmap.isRecycled()) {
return null;
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] byteTmp = baos.toByteArray();
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmapOptions.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(byteTmp, 0, byteTmp.length, bitmapOptions);
int outWidth = bitmapOptions.outWidth;
int outHeight = bitmapOptions.outHeight;
int maxWidth = 400;
int maxHeight = 400;
int minWidth = 150;
int minHeight = 150;
if (outWidth / maxWidth > outHeight / maxHeight) {//
if (outWidth >= maxWidth) {//
imageSize.setWidth(maxWidth);
imageSize.setHeight(outHeight * maxWidth / outWidth);
} else {
imageSize.setWidth(outWidth);
imageSize.setHeight(outHeight);
}
if (outHeight < minHeight) {
imageSize.setHeight(minHeight);
int width = outWidth * minHeight / outHeight;
if (width > maxWidth) {
imageSize.setWidth(maxWidth);
} else {
imageSize.setWidth(width);
}
}
} else {
if (outHeight >= maxHeight) {
imageSize.setHeight(maxHeight);
imageSize.setWidth(outWidth * maxHeight / outHeight);
} else {
imageSize.setHeight(outHeight);
imageSize.setWidth(outWidth);
}
if (outWidth < minWidth) {
imageSize.setWidth(minWidth);
int height = outHeight * minWidth / outWidth;
if (height > maxHeight) {
imageSize.setHeight(maxHeight);
} else {
imageSize.setHeight(height);
}
}
}

return imageSize;
}


三、最后一步非常重要,为ImageView添加属性android:scaleType=”centerCrop”。设置图片时,先从网络上下载得到bitmap对象,调用getImageSize(Bitmap bitmap)方法得到ImageView的宽高,在代码中动态为ImageView设置宽高即可:

ImageSize imageSize = BitmapUtils.getImageSize(loadedImage);
LayoutParams imageLP = imageView.getLayoutParams();
imageLP.width = imageSize.getWidth();
imageLP.height = imageSize.getHeight();
imageView.setLayoutParams(imageLP);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: