需求:app的欢迎界面采用一个简单的ImageView'显示一张图片的形式,但是图片总是会失真、扭曲。由于本人强迫症严重。所以就考虑了所有的思路后,在参考了网友的建议后,采用动态进行适配。
解决方案:
1.计算出最佳的长宽比;
2.将图片按最佳长宽比进行整体放大、缩小;
3.将处理后的图片添加到ImageView中。
package com.horse.util;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.widget.ImageView;
/**
* 该应用程序的公共方法的集合类
* 作者:vaecer on 2015/7/19 12:03
* 邮箱:wuxm1011@163.com.
*/
public class SysUtil {
public void SysUtil() {
}
public static void setImageBackground(Bitmap bitmap, ImageView imageView, int width,
int height) {
//计算最佳缩放倍数,以填充宽高为目标
float scaleX = (float) width / bitmap.getWidth();
float scaleY = (float) height / bitmap.getHeight();
float bestScale = scaleX > scaleY ? scaleX : scaleY;
//以填充高度的前提下,计算最佳缩放倍数
float subX = (width - bitmap.getWidth() * bestScale) / 2;
float subY = (height - bitmap.getHeight() * bestScale) / 2;
Matrix imgMatrix = new Matrix();
imageView.setScaleType(ImageView.ScaleType.MATRIX);
//缩放最佳大小
imgMatrix.postScale(bestScale, bestScale);
//移动到居中位置显示
imgMatrix.postTranslate(subX, subY);
//设置矩阵
imageView.setImageMatrix(imgMatrix);
imageView.setImageBitmap(bitmap);
}
}
DisplayMetrics disMetrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(disMetrics);
int width = disMetrics.widthPixels;
int height = disMetrics.heightPixels;
ImageView welcomeBackground = (ImageView) findViewById(R.id.welcome_bg);
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.cover);//link the drable image
SysUtil.setImageBackground(bitmap,welcomeBackground,width,height);