最近在做一个小的Android项目中遇到一个问题,就是不知道为什么机器输出的分辨率不稳定,总是有几十个像素的误差。导致屏幕适配出现了问题。这次主要记录一下解决思路。
问题就如图 主要是一张背景图 ,在背景图指定区域去镶嵌一张指定图片。
对于这种简单的解决思路就是 将两张图片合成为一张 。因为背景图的尺寸是固有的的 所以合成后显示, 这样就不会乱了。
上代码
/**
* 合成图片
* @param big 底图
* @param small 小图
* @param xInRatio 小图在底图中的横坐标(相对于底图宽的比例)
* @param yInRatio 小图在底图中的纵坐标(相对于底图高的比例)
* @return
*/
public static Bitmap mergeWithCrop(Bitmap big, Bitmap small, float xInRatio, float yInRatio){
int bigW = big.getWidth();
int bigH = big.getHeight();
//scale 计算背景图被缩放的比例 1920 为本人原图实际宽度
float scale = (float) (bigW/1920.0);
//newsmallw 计算镶嵌图的尺寸 270为镶嵌位置实际宽高(正方形)
int newsmallw = (int) (270*scale);
Bitmap newBmp=Bitmap.createBitmap(bigW,bigH,Bitmap.Config.RGB_565);
Canvas cv=new Canvas(newBmp);
//在0,0坐标开始画入bg
cv.drawBitmap(big,0,0,null);
// 开始画入fg,可以从任意位置画入,具体位置自己计算
int smallX = (int)(bigW*xInRatio);
int smallY = (int)(bigH*yInRatio);
//设置镶嵌图片的位置
Rect sRect = new Rect(smallX, smallY, smallX+newsmallw, smallY+newsmallw);
//将小图镶嵌到背景图指定位置
cv.drawBitmap(small,null,sRect,null);
return newBmp;
}