android将老项目改为按屏幕大小自适应,只需2步
16lz
2021-01-26
先看效果图
老项目自适应后
目标:老项目是320*480,改为按屏幕大小自适应。
1.主要是图片和坐标,我都放在一个类里了,改下包名,直接加入项目。
package wyf.ytl;import java.io.IOException;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.util.DisplayMetrics;public class ZoomImg {public final static int widthOld = 320; // 原设计屏幕宽度public final static int heithtOld = 480;public static float widthScale = 1; // 原转为新 比例系数public static float heightScale = 1; //原设计屏幕高度public static float widthScaleTouch = 1; // 新转为原 比例系数 反向,比如触控坐标,原值不动,只缩放xy.public static float heightScaleTouch = 1;/**根据原设计屏幕 缩放图片 使能自适应 * * @param bm 原图片 * @param activity 所在界面 。如果当前就是在Activity直接用this * @return 自适应后的图片 */public static Bitmap zoomImgAuto(Bitmap bm, Activity activity) {getScreen(activity);// 根据屏幕大小计算出比例系数if (null != bm) {return zoomImg(bm, (int) (bm.getWidth() * widthScale),(int) (bm.getHeight() * heightScale));}return null;}/**根据屏幕大小计算出比例系数 * * @param activity 所在界面 */public static void getScreen(Activity activity){DisplayMetrics outMetrics = new DisplayMetrics();activity.getWindowManager().getDefaultDisplay().getMetrics(outMetrics);int widthPixels = outMetrics.widthPixels;int heightPixels = outMetrics.heightPixels;// Log.i(TAG, "widthPixels = " + widthPixels + ",heightPixels = " +// heightPixels);widthScale = (float) widthPixels / (float) widthOld;heightScale = (float) heightPixels / (float) heithtOld;widthScaleTouch = (float) widthOld / (float) widthPixels;heightScaleTouch = (float) heithtOld / (float) heightPixels;}// 缩放图片public static Bitmap zoomImg(String img, int newWidth, int newHeight) {// 图片源Bitmap bm = BitmapFactory.decodeFile(img);if (null != bm) {return zoomImg(bm, newWidth, newHeight);}return null;}public static Bitmap zoomImg(Context context, String img, int newWidth,int newHeight) {// 图片源try {Bitmap bm = BitmapFactory.decodeStream(context.getAssets().open(img));if (null != bm) {return zoomImg(bm, newWidth, newHeight);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}// 缩放图片public static Bitmap zoomImg(Bitmap bm, int newWidth, int newHeight) {// 获得图片的宽高int width = bm.getWidth();int height = bm.getHeight();// 计算缩放比例float scaleWidth = ((float) newWidth) / width;float scaleHeight = ((float) newHeight) / height;// 取得想要缩放的matrix参数Matrix matrix = new Matrix();matrix.postScale(scaleWidth, scaleHeight);// 得到新的图片Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix,true);return newbm;}}
2.将所有坐标和图片都这样处理就可以了。
为了能一键替换,继续封装
package wyf.ytl;import java.io.IOException;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Paint;import android.util.DisplayMetrics;public class ZoomImg extends Canvas {public final static int widthOld = 320; // 原设计屏幕宽度public final static int heithtOld = 480;public static float widthScale = 1; // 原转为新 比例系数public static float heightScale = 1; //原设计屏幕高度public static float widthScaleTouch = 1; // 新转为原 比例系数 反向,比如触控坐标,原值不动,只缩放xy.public static float heightScaleTouch = 1;public static void drawText(Canvas canvas,Activity activity,String text, float x, float y, Paint paint){canvas.drawText(text, x*widthScale, y*heightScale, paint);//绘制图片}public static void drawBitmap(Canvas canvas,Activity activity,Bitmap bitmap, float left, float top, Paint paint){canvas.drawBitmap(zoomImgAuto(bitmap,activity), left*widthScale, top*heightScale, null);//绘制图片}/**根据原设计屏幕 缩放图片 使能自适应 * * @param bm 原图片 * @param activity 所在界面 。如果当前就是在Activity直接用this * @return 自适应后的图片 */public static Bitmap zoomImgAuto(Bitmap bm, Activity activity) {getScreen(activity);// 根据屏幕大小计算出比例系数if (null != bm) {return zoomImg(bm, (int) (bm.getWidth() * widthScale),(int) (bm.getHeight() * heightScale));}return null;}/**根据屏幕大小计算出比例系数 * * @param activity 所在界面 */public static void getScreen(Activity activity){DisplayMetrics outMetrics = new DisplayMetrics();activity.getWindowManager().getDefaultDisplay().getMetrics(outMetrics);int widthPixels = outMetrics.widthPixels;int heightPixels = outMetrics.heightPixels;// Log.i(TAG, "widthPixels = " + widthPixels + ",heightPixels = " +// heightPixels);widthScale = (float) widthPixels / (float) widthOld;heightScale = (float) heightPixels / (float) heithtOld;widthScaleTouch = (float) widthOld / (float) widthPixels;heightScaleTouch = (float) heithtOld / (float) heightPixels;}// 缩放图片public static Bitmap zoomImg(String img, int newWidth, int newHeight) {// 图片源Bitmap bm = BitmapFactory.decodeFile(img);if (null != bm) {return zoomImg(bm, newWidth, newHeight);}return null;}public static Bitmap zoomImg(Context context, String img, int newWidth,int newHeight) {// 图片源try {Bitmap bm = BitmapFactory.decodeStream(context.getAssets().open(img));if (null != bm) {return zoomImg(bm, newWidth, newHeight);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}// 缩放图片public static Bitmap zoomImg(Bitmap bm, int newWidth, int newHeight) {// 获得图片的宽高int width = bm.getWidth();int height = bm.getHeight();// 计算缩放比例float scaleWidth = ((float) newWidth) / width;float scaleHeight = ((float) newHeight) / height;// 取得想要缩放的matrix参数Matrix matrix = new Matrix();matrix.postScale(scaleWidth, scaleHeight);// 得到新的图片Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix,true);return newbm;}}
更多相关文章
- 解决android模拟器太大,小屏幕无法完全显示的问题
- android ImageButton响应不规则图片
- android 问题汇总系列之八
- android ScrollView,ListView 截屏并保存到图库
- android中使用代码适配屏幕,dp与px互转、sp与px互转
- Android(安卓)使用OKHttp获取字符串和下载图片
- Android之Android(安卓)studio设置背景图片
- 高德地图缩放级别对应的比例尺
- android屏幕旋转