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”。(此部分内容为转载)
二、根据以下方法得到ImageView控件的大小,但是图片的实际大小并不需要改变。
三、最后一步非常重要,为ImageView添加属性android:scaleType=”centerCrop”。设置图片时,先从网络上下载得到bitmap对象,调用getImageSize(Bitmap bitmap)方法得到ImageView的宽高,在代码中动态为ImageView设置宽高即可:
效果图:
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);
相关文章推荐
- 微信JS-SDK demo使用
- 微信支付提示缺少appid解决办法
- 张小丫第一次微信支付(讲解)
- 仿微信android客户端分享网页内容解决方案
- 微信公众号开发sprintf()函数其中%S等符号的说明
- 微信分享到朋友圈自定义图文
- XMPP框架 微信项目开发之Socket聊天室的建立与登录
- 實戰案例 - 微信平台與自有產品資料對接 (2)
- 关于MVC微信开发遇到的那些坑。
- 微信公众平台生成场景二维码
- 微信支付小结
- 微信支付笔记
- 微信支付jsApiParameter::{"return_code":"FAIL","return_msg":"invalid out_trade_no"}
- 微信为啥这么省流量(技术宅入)
- 微信自定义菜单view类型获取openid访问网页
- 个人微信公众号VI升级心路
- 微信 snsapi_userinfo 失败
- 微信下输入法在IOS和安卓下的诡异
- XMPP框架 微信项目开发之CoreData学习——使用CoreData建立多个数据库
- 后微信时代到来 海量内容或成最后一根稻草