Android常用辅助类(四)——屏幕、图片及其他

1、屏幕相关类

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.WindowManager;

//获得屏幕相关的辅助类
public class ScreenUtils
{
	private ScreenUtils()
	{
		/* cannot be instantiated */
		throw new UnsupportedOperationException("cannot be instantiated");
	}

	/**
	 * 获得屏幕高度
	 * 
	 * @param context
	 * @return
	 */
	public static int getScreenWidth(Context context)
	{
		WindowManager wm = (WindowManager) context
				.getSystemService(Context.WINDOW_SERVICE);
		DisplayMetrics outMetrics = new DisplayMetrics();
		wm.getDefaultDisplay().getMetrics(outMetrics);
		return outMetrics.widthPixels;
	}

	/**
	 * 获得屏幕宽度
	 * 
	 * @param context
	 * @return
	 */
	public static int getScreenHeight(Context context)
	{
		WindowManager wm = (WindowManager) context
				.getSystemService(Context.WINDOW_SERVICE);
		DisplayMetrics outMetrics = new DisplayMetrics();
		wm.getDefaultDisplay().getMetrics(outMetrics);
		return outMetrics.heightPixels;
	}

	/**
	 * 获得状态栏的高度
	 * 
	 * @param context
	 * @return
	 */
	public static int getStatusHeight(Context context)
	{

		int statusHeight = -1;
		try
		{
			Class<?> clazz = Class.forName("com.android.internal.R$dimen");
			Object object = clazz.newInstance();
			int height = Integer.parseInt(clazz.getField("status_bar_height")
					.get(object).toString());
			statusHeight = context.getResources().getDimensionPixelSize(height);
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		return statusHeight;
	}

	/**
	 * 获取当前屏幕截图,包含状态栏
	 * 
	 * @param activity
	 * @return
	 */
	public static Bitmap snapShotWithStatusBar(Activity activity)
	{
		View view = activity.getWindow().getDecorView();
		view.setDrawingCacheEnabled(true);
		view.buildDrawingCache();
		Bitmap bmp = view.getDrawingCache();
		int width = getScreenWidth(activity);
		int height = getScreenHeight(activity);
		Bitmap bp = null;
		bp = Bitmap.createBitmap(bmp, 0, 0, width, height);
		view.destroyDrawingCache();
		return bp;

	}

	/**
	 * 获取当前屏幕截图,不包含状态栏
	 * 
	 * @param activity
	 * @return
	 */
	public static Bitmap snapShotWithoutStatusBar(Activity activity)
	{
		View view = activity.getWindow().getDecorView();
		view.setDrawingCacheEnabled(true);
		view.buildDrawingCache();
		Bitmap bmp = view.getDrawingCache();
		Rect frame = new Rect();
		activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
		int statusBarHeight = frame.top;

		int width = getScreenWidth(activity);
		int height = getScreenHeight(activity);
		Bitmap bp = null;
		bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height
				- statusBarHeight);
		view.destroyDrawingCache();
		return bp;

	}

}

2、获取APP信息

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;

//跟App相关的辅助类
public class AppUtils
{

	private AppUtils()
	{
		/* cannot be instantiated */
		throw new UnsupportedOperationException("cannot be instantiated");

	}

	/**
	 * 获取应用程序名称
	 */
	public static String getAppName(Context context)
	{
		try
		{
			PackageManager packageManager = context.getPackageManager();
			PackageInfo packageInfo = packageManager.getPackageInfo(
					context.getPackageName(), 0);
			int labelRes = packageInfo.applicationInfo.labelRes;
			return context.getResources().getString(labelRes);
		} catch (NameNotFoundException e)
		{
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * [获取应用程序版本名称信息]
	 * 
	 * @param context
	 * @return 当前应用的版本名称
	 */
	public static String getVersionName(Context context)
	{
		try
		{
			PackageManager packageManager = context.getPackageManager();
			PackageInfo packageInfo = packageManager.getPackageInfo(
					context.getPackageName(), 0);
			return packageInfo.versionName;

		} catch (NameNotFoundException e)
		{
			e.printStackTrace();
		}
		return null;
	}

}

3、图片相关

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.ref.WeakReference;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Typeface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo.State;
import android.util.Base64;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class ToolFor9Ge 
{
	// 缩放/裁剪图片
 	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;
 	}
 	
 	// 判断有无网络链接
 	public static boolean checkNetworkInfo(Context mContext) {
 	  	ConnectivityManager conMan = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
 	  	State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
 	  	State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
 	  	if (mobile == State.CONNECTED || mobile == State.CONNECTING)
 	  	   return true;
 	  	if (wifi == State.CONNECTED || wifi == State.CONNECTING)
 	  	   return true;
 	  	return false;
 	}
 	
 	// 从路径获取文件名
 	public static String getFileName(String pathandname){ 
 		int start=pathandname.lastIndexOf("/");  
         int end=pathandname.lastIndexOf(".");  
         if(start!=-1 && end!=-1){  
             return pathandname.substring(start+1,end);    
         }else{  
             return null;  
         }             
 	}
 	
 	// 通过路径生成Base64文件
 	public static String getBase64FromPath(String path)
 	{
 		String base64="";
 		try
 		{
 			File file = new File(path);
 			byte[] buffer = new byte[(int) file.length() + 100];  
			@SuppressWarnings("resource")
			int length = new FileInputStream(file).read(buffer);  
 	        base64 = Base64.encodeToString(buffer, 0, length,  Base64.DEFAULT);
 		}
 		catch (IOException e) {
			e.printStackTrace();
		}
 		return base64;
 	}
 	
 	//通过文件路径获取到bitmap
 	public static Bitmap getBitmapFromPath(String path, int w, int h) {
		BitmapFactory.Options opts = new BitmapFactory.Options();
		// 设置为ture只获取图片大小
		opts.inJustDecodeBounds = true;
		opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
		// 返回为空
		BitmapFactory.decodeFile(path, opts);
		int width = opts.outWidth;
		int height = opts.outHeight;
		float scaleWidth = 0.f, scaleHeight = 0.f;
		if (width > w || height > h) {
			// 缩放
			scaleWidth = ((float) width) / w;
			scaleHeight = ((float) height) / h;
		}
		opts.inJustDecodeBounds = false;
		float scale = Math.max(scaleWidth, scaleHeight);
		opts.inSampleSize = (int)scale;
		WeakReference<Bitmap> weak = new WeakReference<Bitmap>(BitmapFactory.decodeFile(path, opts));
		return Bitmap.createScaledBitmap(weak.get(), w, h, true);
	}
 	
 	//把bitmap转换成base64
 	public static String getBase64FromBitmap(Bitmap bitmap, int bitmapQuality)
 	{
 		ByteArrayOutputStream bStream = new ByteArrayOutputStream();
 		bitmap.compress(CompressFormat.PNG, bitmapQuality, bStream);
 		byte[] bytes = bStream.toByteArray();
 		return Base64.encodeToString(bytes, Base64.DEFAULT);
 	}
 	
 	//把base64转换成bitmap
 	public static Bitmap getBitmapFromBase64(String string)
 	{
 		byte[] bitmapArray = null;
 		try {
 		bitmapArray = Base64.decode(string, Base64.DEFAULT);
 		} catch (Exception e) {
 		e.printStackTrace();
 		}
 		return BitmapFactory.decodeByteArray(bitmapArray, 0,bitmapArray.length);
 	}
 	
 	//把Stream转换成String
 	public static String convertStreamToString(InputStream is) {
 		BufferedReader reader = new BufferedReader(new InputStreamReader(is));
			StringBuilder sb = new StringBuilder();
			String line = null;

			try {
				while ((line = reader.readLine()) != null) {
					sb.append(line + "/n");
				}
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			return sb.toString();	
 	}	
 	
 	// 修改整个界面所有控件的字体
 	public static void changeFonts(ViewGroup root,String path, Activity act) {  
        //path是字体路径
 		Typeface tf = Typeface.createFromAsset(act.getAssets(),path);  
        for (int i = 0; i < root.getChildCount(); i++) {  
            View v = root.getChildAt(i); 
            if (v instanceof TextView) {  
               ((TextView) v).setTypeface(tf);  
            } else if (v instanceof Button) {  
               ((Button) v).setTypeface(tf);  
            } else if (v instanceof EditText) {  
               ((EditText) v).setTypeface(tf);  
            } else if (v instanceof ViewGroup) {  
               changeFonts((ViewGroup) v, path,act);  
            } 
        }  
     }
 	
 	// 修改整个界面所有控件的字体大小
  	public static void changeTextSize(ViewGroup root,int size, Activity act) {  
         for (int i = 0; i < root.getChildCount(); i++) {  
             View v = root.getChildAt(i);  
             if (v instanceof TextView) {  
                ((TextView) v).setTextSize(size);
             } else if (v instanceof Button) {  
            	((Button) v).setTextSize(size);
             } else if (v instanceof EditText) {  
            	((EditText) v).setTextSize(size);  
             } else if (v instanceof ViewGroup) {  
                changeTextSize((ViewGroup) v,size,act);  
             }  
         }  
      }
  	
  	// 不改变控件位置,修改控件大小
	public static void changeWH(View v,int W,int H)
	{
		LayoutParams params = (LayoutParams)v.getLayoutParams();
	    params.width = W;
	    params.height = H;
	    v.setLayoutParams(params);
	}
	
	// 修改控件的高
	public static void changeH(View v,int H)
	{
		LayoutParams params = (LayoutParams)v.getLayoutParams();
	    params.height = H;
	    v.setLayoutParams(params);
	}
		

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值