安卓保存ImageView上的图片,并保存到相册(三)

接上文,还有一个工具类,把代码也贴出来,大家可以参考一下。根据自己的需要灵活的改动

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);
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值