1.android studio Gradle配置
//MultiImageSelector compile 'com.github.lovetuzitong:MultiImageSelector:1.2' compile 'com.squareup.picasso:picasso:2.5.2'
repositories { //用來清除無用資源的插件 maven { url "https://jitpack.io" } }
2.直接貼代碼,具體看代碼註釋
import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.generic.RoundingParams; import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.imagepipeline.core.ImagePipeline; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import api.status; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import data.DataManager; import me.nereo.multi_image_selector.MultiImageSelector; import me.nereo.multi_image_selector.MultiImageSelectorActivity; import tool.OkHttp3ClientManager; import tool.PUB; import tool.PermissionUtils; import tool.ToastUtil; import static com.dykj.hongchunshu.MainActivity.mLogin; /************************************************************ * Explain:設置頭像 * Create by [email protected] ***********************************************************/ public class SetHeadActivity extends Activity { @Bind(R.id.icon_activity_change_icon) TextView mIconChange; @Bind(R.id.icon_activity_save) TextView mIconSave; @Bind(R.id.icon_activity_cancle) TextView mIconCancle; @Bind(R.id.img_main_back) ImageView imgMainBack; @Bind(R.id.tv_title) TextView tvTitle; @Bind(R.id.icon_activity_civ) SimpleDraweeView iconActivityCiv; private Activity mActivity; private String mPhotopath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/tempphoto.jpg"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mActivity = this; setContentView(R.layout.activity_icon); ButterKnife.bind(this); //android 6.0 申請權限 PermissionUtils.requestPermission(this, PermissionUtils.CODE_WRITE_EXTERNAL_STORAGE, new PermissionUtils.PermissionGrant() { @Override public void onPermissionGranted(int requestCode) { // Toast.makeText(mActivity, "Result Permission Grant CODE_WRITE_EXTERNAL_STORAGE", Toast.LENGTH_SHORT).show(); } }); InitDta(); } /* * Explain:綁定視圖 * Create by [email protected] */ private void InitDta() { tvTitle.setText("設置頭像"); /*返回*/ imgMainBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); //綁定頭像 Uri uri = Uri.parse(DataManager.Domain + mLogin.getResult().getHead_pic()); iconActivityCiv.setImageURI(uri); //圓形展示 RoundingParams roundingParams = RoundingParams.fromCornersRadius(5f); roundingParams.setBorder(R.color.red, 0.1f); roundingParams.setRoundAsCircle(true); iconActivityCiv.getHierarchy().setRoundingParams(roundingParams); } /** * 拍照和選擇 * * @param view */ @OnClick({R.id.icon_activity_change_icon, R.id.icon_activity_save, R.id.icon_activity_cancle}) public void onClick(View view) { switch (view.getId()) { case R.id.icon_activity_change_icon: MultiImageSelector.create(mActivity) .showCamera(true) // 是否顯示相機. 默認爲顯示 .count(10) // 最大選擇圖片數量, 默認爲9. 只有在選擇模式爲多選時有效 .single() // 單選模式 // .multi() // 多選模式, 默認模式; // .origin(null) // 默認已選擇圖片. 只有在選擇模式爲多選時有效 .start(mActivity, 0); break; } } /** * 裁剪圖片 * * @param uri */ public void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true");// crop=true 有這句才能出來最後的裁剪頁面. intent.putExtra("aspectX", 4);// 這兩項爲裁剪框的比例. intent.putExtra("aspectY", 4);// x:y=1:2 intent.putExtra("outputX", 200); intent.putExtra("outputY", 200); intent.putExtra("output", Uri.fromFile(new File(mPhotopath))); intent.putExtra("outputFormat", "JPEG");// 返回格式 intent.putExtra("return-data", true); startActivityForResult(intent, 1); } /** * 返回接收數據處理 * * @param requestCode * @param resultCode * @param data */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 0://選擇或拍照後返回 try { // 獲取返回的圖片列表(存放的是圖片路徑) List<String> path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT); if (path.size() > 0) { // 處理你自己的邏輯 .... PUB.tlog.d(path); File mFile = new File(path.get(0).toString()); if (mFile.exists()) { //裁剪 startPhotoZoom(Uri.fromFile(mFile)); } else { ToastUtil.show(getApplicationContext(), "文件不存在!"); } } } catch (Exception ex){ PUB.tlog.i(ex); } break; case 1://裁剪圖片後 if (data == null) { return; } Uri uri = Uri.parse("file://" + mPhotopath); iconActivityCiv.setImageURI(uri); //上傳照片 File file = new File(mPhotopath); DoUpload(file); break; } super.onActivityResult(requestCode, resultCode, data); } /** * 上傳照片 * * @param file */ private void DoUpload(File file) { Map<String, Object> map = new HashMap<String, Object>(); map.put("user_id", MainActivity.mLogin.getResult().getUser_id()); Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 0) {// 請求成功 status api = new status(); api = (status) msg.obj; if (api.status == 1) { //成功 mLogin.getResult().setHead_pic(api.result.toString()); Uri uri = Uri.parse(DataManager.Domain + mLogin.getResult().getHead_pic()); ImagePipeline imagePipeline = Fresco.getImagePipeline(); imagePipeline.evictFromMemoryCache(uri); imagePipeline.evictFromDiskCache(uri); // combines above two lines imagePipeline.evictFromCache(uri); //刪除照片 File file = new File(mPhotopath); if (file.exists()) { file.delete(); //文件刪除 PUB.tlog.d("刪除文件:" + mPhotopath); } finish(); } ToastUtil.show(getApplicationContext(), api.msg); } else { ToastUtil.show(getApplicationContext(), msg.obj.toString()); } } }; OkHttp3ClientManager.getInstance().photoUploadExecute(DataManager.API("update_pic"), map, "file", file, mHandler, status.class); } }