先看效果图

老项目​​​​

 

自适应后

目标:老项目是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;}}

 

更多相关文章

  1. 解决android模拟器太大,小屏幕无法完全显示的问题
  2. android ImageButton响应不规则图片
  3. android 问题汇总系列之八
  4. android ScrollView,ListView 截屏并保存到图库
  5. android中使用代码适配屏幕,dp与px互转、sp与px互转
  6. Android(安卓)使用OKHttp获取字符串和下载图片
  7. Android之Android(安卓)studio设置背景图片
  8. 高德地图缩放级别对应的比例尺
  9. android屏幕旋转

随机推荐

  1. 深入理解 Android(安卓)消息机制原理
  2. 三分钟搞定安卓+iOS适配问题
  3. 【总结问题】在Eclipse中安装ADT(Android
  4. android 自定义Toast样式和显示方式
  5. Android启动service下载失败后stopServic
  6. Android(安卓)QQ第三方登录 分享
  7. 微软Office应用将于明年3月登陆iOS与Andr
  8. android 数据存储之 Files
  9. 关于ANE的调试心德
  10. 我初学android的一点体会