android手机微信广告图片,Android仿微信聊天图片缩略图裁剪

本文地址:http://www.voidcn.com/article/p-owmqhjph-yy.html

效果图:

1、横图原图:

0818b9ca8b590ca3270a3433284dd417.png

横图聊天界面缩略图:

0818b9ca8b590ca3270a3433284dd417.png

2、竖图原图:

0818b9ca8b590ca3270a3433284dd417.png

竖图聊天界面缩略图:

0818b9ca8b590ca3270a3433284dd417.png

3、聊天界面效果图:

0818b9ca8b590ca3270a3433284dd417.png

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

0818b9ca8b590ca3270a3433284dd417.png

常量

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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值