package com.hjx.personalcenter.activity; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Color; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.MediaStore; import android.support.annotation.NonNull; import android.support.v4.content.FileProvider; import android.support.v7.app.AppCompatActivity; import android.view.Gravity; import android.view.View; import android.widget.AdapterView; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.generic.RoundingParams; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.view.SimpleDraweeView; import com.hjx.personalcenter.R; import com.hjx.personalcenter.util.CropUtils; import com.hjx.personalcenter.util.DialogPermission; import com.hjx.personalcenter.util.FileUtil; import com.hjx.personalcenter.util.PermissionUtil; import com.hjx.personalcenter.util.SharedPreferenceMark; import com.mylhyl.circledialog.CircleDialog; import com.mylhyl.circledialog.callback.ConfigButton; import com.mylhyl.circledialog.callback.ConfigDialog; import com.mylhyl.circledialog.params.ButtonParams; import com.mylhyl.circledialog.params.DialogParams; import java.io.File; /** * Created by h on 2017/8/11. */ public class FeedBackActivity extends AppCompatActivity implements View.OnClickListener { private ImageView iv_cance,iv_show,iv_take; private EditText content, phone; private TextView tv_sub; private static final int REQUEST_CODE_TAKE_PHOTO = 1; private static final int REQUEST_CODE_ALBUM = 2; private static final int REQUEST_CODE_CROUP_PHOTO = 3; SimpleDraweeView mSimpleDraweeView; private File file; private Uri uri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Fresco.initialize(this); setContentView(R.layout.activity_feedback); initView(); initData(); initLister(); } private void initView() { iv_cance = (ImageView) findViewById(R.id.cancel); mSimpleDraweeView = (SimpleDraweeView) findViewById(R.id.show_iv); iv_take = (ImageView) findViewById(R.id.iv_take); content = (EditText) findViewById(R.id.feedback_content); phone = (EditText) findViewById(R.id.feedback_phone); tv_sub = (TextView) findViewById(R.id.feedback_sub); } private void initData() { file = new File(FileUtil.getCachePath(this), "user-avatar.jpg"); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { uri = Uri.fromFile(file); } else { //通过FileProvider创建一个content类型的Uri(android 7.0需要这样的方法跨应用访问) uri = FileProvider.getUriForFile(MyApplication.getContext(), "com.hjx.personalcenter", file); } } private void initLister() { iv_cance.setOnClickListener(this); iv_take.setOnClickListener(this); tv_sub.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.cancel: finish(); break; case R.id.iv_take: choiceAvatar(); break; case R.id.feedback_sub: break; } } //拍摄头像 private void choiceAvatar() { final String[] items = {"拍照", "从相册选择"}; new CircleDialog.Builder(this) .configDialog(new ConfigDialog() { @Override public void onConfig(DialogParams params) { //增加弹出动画 params.gravity = Gravity.CENTER; } }) .setTitle("请选择图片来源") .setWidth(0.5f) .setItems(items, new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { switch (position){ case 0: if (PermissionUtil.hasCameraPermission(FeedBackActivity.this)) { uploadAvatarFromPhotoRequest(); } break; case 1: uploadAvatarFromAlbumRequest(); break; } } }) .setNegative("取消", null) .configNegative(new ConfigButton() { @Override public void onConfig(ButtonParams params) { //取消按钮字体颜色 params.textColor = Color.RED; } }) .show(); } //照相 private void uploadAvatarFromPhotoRequest() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(intent, REQUEST_CODE_TAKE_PHOTO); } //选择图库 private void uploadAvatarFromAlbumRequest() { Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); photoPickerIntent.setType("image/*"); startActivityForResult(photoPickerIntent, REQUEST_CODE_ALBUM); } //回掉 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != -1) { return; } if (requestCode == REQUEST_CODE_ALBUM && data != null) { Uri newUri; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { newUri = Uri.parse("file:///" + CropUtils.getPath(this, data.getData())); } else { newUri = data.getData(); } if (newUri != null) { startPhotoZoom(newUri); } else { Toast.makeText(this, "没有得到相册图片", Toast.LENGTH_LONG).show(); } } else if (requestCode == REQUEST_CODE_TAKE_PHOTO) { startPhotoZoom(uri); } else if (requestCode == REQUEST_CODE_CROUP_PHOTO) { uploadAvatarFromPhoto(); } } private void uploadAvatarFromPhoto() { compressAndUploadAvatar(file.getPath()); } private void compressAndUploadAvatar(String fileSrc) { //上传到服务器 final File cover = FileUtil.getSmallBitmap(this, fileSrc); String mimeType = "image/*"; //requestBody = RequestBody.create(MediaType.parse(mimeType), file); //String fileName = cover.getName(); //HttpManager.getInstance().header(this, fileSrc); //photo = MultipartBody.Part.createFormData("portrait", fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()), requestBody); //Fresco设置圆形头像 GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources()); GenericDraweeHierarchy hierarchy = builder .setDesiredAspectRatio(1f) .setFailureImage(R.mipmap.blank) //圆形头像 .setRoundingParams(RoundingParams.asCircle()) .build(); //加载本地图片 Uri uri = Uri.fromFile(cover); DraweeController controller = Fresco.newDraweeControllerBuilder() .setOldController(mSimpleDraweeView.getController()) .setUri(uri) .build(); mSimpleDraweeView.setHierarchy(hierarchy); mSimpleDraweeView.setController(controller); } public void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.putExtra("crop", "true");// crop=true 有这句才能出来最后的裁剪页面. intent.putExtra("aspectX", 1);// 这两项为裁剪框的比例. intent.putExtra("aspectY", 1);// x:y=1:1 // intent.putExtra("outputX", 400);//图片输出大小 // intent.putExtra("outputY", 400); intent.putExtra("output", Uri.fromFile(file)); intent.putExtra("outputFormat", "JPEG");// 返回格式 startActivityForResult(intent, REQUEST_CODE_CROUP_PHOTO); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case PermissionUtil.REQUEST_SHOWCAMERA: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission Granted uploadAvatarFromPhotoRequest(); } else { if (!SharedPreferenceMark.getHasShowCamera()) { SharedPreferenceMark.setHasShowCamera(true); new DialogPermission(this, "关闭摄像头权限影响扫描功能"); } else { Toast.makeText(this, "未获取摄像头权限", Toast.LENGTH_SHORT) .show(); } } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } }