接上文,还有一个工具类,把代码也贴出来,大家可以参考一下。根据自己的需要灵活的改动
package com.example.mylibrary.utils.display; import android.app.Activity; import android.content.Context; import android.graphics.Rect; import android.util.DisplayMetrics; import android.util.TypedValue; public class HnDimenUtil { /** * 返回屏幕宽度(像素) */ public static int getScreenWidth(Context context) { return context.getResources().getDisplayMetrics().widthPixels; } /** * 返回屏幕高度(像素, 包含了状态栏的高度) */ public static int getScreenHeight(Context context) { return context.getResources().getDisplayMetrics().heightPixels; } /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public static int dp2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * 根据手机的分辨率从 px(像素) 的单位 转成为 dp */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } /** * 得到的屏幕的宽度 */ public static int getWidthPx(Activity activity) { // DisplayMetrics 一个描述普通显示信息的结构,例如显示大小、密度、字体尺寸 DisplayMetrics displaysMetrics = new DisplayMetrics();// 初始化一个结构 activity.getWindowManager().getDefaultDisplay().getMetrics(displaysMetrics);// 对该结构赋值 return displaysMetrics.widthPixels; } /** * 得到的屏幕的高度 */ public static int getHeightPx(Activity activity) { // DisplayMetrics 一个描述普通显示信息的结构,例如显示大小、密度、字体尺寸 DisplayMetrics displaysMetrics = new DisplayMetrics();// 初始化一个结构 activity.getWindowManager().getDefaultDisplay().getMetrics(displaysMetrics);// 对该结构赋值 return displaysMetrics.heightPixels; } /** * 得到屏幕的dpi * @param activity * @return */ public static int getDensityDpi(Activity activity) { // DisplayMetrics 一个描述普通显示信息的结构,例如显示大小、密度、字体尺寸 DisplayMetrics displaysMetrics = new DisplayMetrics();// 初始化一个结构 activity.getWindowManager().getDefaultDisplay().getMetrics(displaysMetrics);// 对该结构赋值 return displaysMetrics.densityDpi; } /** * 返回状态栏/通知栏的高度 * * @param activity * @return */ public static int getStatusHeight(Activity activity) { Rect frame = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; return statusBarHeight; } /** * sp转px */ public static int sp2px(Context context, float spVal) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spVal, context.getResources().getDisplayMetrics()); } /** * px转dp */ public static float px2dp(Context context, float pxVal) { final float scale = context.getResources().getDisplayMetrics().density; return (pxVal / scale); } /** * px转sp */ public static float px2sp(Context context, float pxVal) { return (pxVal / context.getResources().getDisplayMetrics().scaledDensity); } }
接下来就是使用的例子,我把代码贴出来供大家参考使用:
package com.example.administrator.mytestretrofit.ui.activity; import android.graphics.Bitmap; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.example.administrator.mytestretrofit.R; import com.example.mylibrary.app.App; import com.example.mylibrary.base.BasePresenter; import com.example.mylibrary.base.Screen; import com.example.mylibrary.utils.camera.SaveImgTools; import com.example.mylibrary.utils.permission.PermissionUtils; import com.example.mylibrary.utils.toast.ToastUtils; import com.example.mylibrary.view.dialog.TakePhotoDialog; public class TakePhotoActivity extends Screen implements View.OnClickListener,PermissionUtils.HavePermission ,SaveImgTools.HavePressSaveImgDialogSure{ private ImageView imageViewTakePhoto; private TextView textViewSavePhoto; /** * 请求代码工具类 */ private PermissionUtils permissionUtils; @Override protected void initView() { super.initView(); setContentView(R.layout.activity_take_photo); imageViewTakePhoto = findViewById(R.id.ivTakePhoto); textViewSavePhoto = findViewById(R.id.tvSavePhoto); imageViewTakePhoto.setOnClickListener(this::onClick); textViewSavePhoto.setOnClickListener(this::onClick); } @Override protected BasePresenter createPresenter() { return null; } @Override protected void initData() { super.initData(); permissionUtils = new PermissionUtils(this, this::havePermission); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.ivTakePhoto: permissionUtils.requestPerssionCamera(R.id.ivTakePhoto); break; case R.id.tvSavePhoto: SaveImgTools.ShowSaveImgDialog(this, this::havePressSure, R.id.tvSavePhoto); break; default: } } @Override public void havePermission(int resId) { switch (resId) { case R.id.ivTakePhoto: TakePhotoDialog dialog = TakePhotoDialog.newInstance(); dialog.setOnImageCallBack(new TakePhotoDialog.OnImageCallBack() { @Override public void onImage(Bitmap bitmap, Uri uri) { //对图片的上传造作等 // ToastUtils.showToast("已经选择好图片"); imageViewTakePhoto.setImageBitmap(bitmap); } }); dialog.show(getFragmentManager(), "test"); break; case R.id.tvSavePhoto: SaveImgTools.SaveImageToSysAlbum(this,imageViewTakePhoto); break; default: } } @Override public void havePressSure(int resId) { permissionUtils.requestPerssionStorage(resId); } }