❶ 做了一個android的demo實現頭像裁剪上傳,但是拍照完成後出現如下圖問題,圖庫也一樣大神們幫忙看看
實現思維路徑:
以進入相機拍照的思維路線為例子:
1.進入app
2.判斷之前是否保存頭像,如果有就顯示歷史圖像 (下面代碼中在getOldAvatar();方法中執行這個邏輯)
3.點擊更換圖像的Button或者布局,啟動對話框(下面代碼中在dialogueBox();方法執行這個邏輯)
4.系統版本判斷授權方式(靜態還是動態授權),判斷之前是否已經授權 (setPermissions(Permissions_CAMERA_KEY);這個方法執行授權邏輯)
5.如果是首次授權,就執行首次授權完成後馬上運行的回調方法 onRequestPermissionsResult
5.判斷完成不管是否是首次授權還是之前就是授權過了都要執行enterCamera();方法啟動相機並且發送攜帶數據的請求
6.啟動相機完成後,並且拍照完成退出相機,都要運行Intent返回數據請求回調方法onActivityResult。將傳入的數據傳入到cropPhoto(data.getData());方法里去執行圖片剪裁。
7.在cropPhoto方法里將攜帶數據跳轉到裁剪界面中裁剪圖片,裁剪完成後又要回到onActivityResult回調方法里,執行裁剪完的數據回調工作。
8.在onActivityResult回調方法里,裁剪完的圖片將運行setPicToView 方法保存圖片。保存的圖片將在下次啟動activity時作為歷史頭像調用。
package com.example.lenovo.mydemoapp;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.StrictMode;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
❷ android 拍照,剪切,上傳頭像
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop", "true"); // 裁剪
intent.putExtra("aspectX", 5);// 裁剪框比例
intent.putExtra("aspectY", 4);
intent.putExtra("outputX", 500);// 輸出圖片大小
intent.putExtra("outputY", 400);
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
intent.putExtra("noFaceDetection", false); // no face detection
startActivityForResult(intent, requestCode);