android將老項目改爲按屏幕大小自適應,只需2步

先看效果圖

老項目​​​​

 

自適應後

目標:老項目是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 block
			e.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 block
			e.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;
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章