Android头像更换

来源:互联网 发布:c语言心形图案代码 编辑:程序博客网 时间:2024/04/27 20:59

直接上代码:

TestActivity.java

import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.media.MediaScannerConnection;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.Toast;public class TestActivity extends Activity implements OnClickListener {/** 需要被更换的头像 */private ImageView mAvatar;/** 剪切后的map对象 */private Bitmap mBitmap;/** 头像文件 **/private File mFinalPicFile;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);initView();}private void initView() {mAvatar = (ImageView) findViewById(R.id.iv);mAvatar.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.iv:GetPicUtil.getImgFromLocal(this, 10000);break;default:break;}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (10000 == requestCode) {// 从本地选择图片// 看完相册后,将点击的图片uri传给剪切板if (data != null) {Uri imgUrl = data.getData();zoomPhoto(imgUrl, requestCode);}}if (11000 == requestCode) {if (data != null) {Bundle bundle_2 = data.getExtras();mBitmap = (Bitmap) bundle_2.get("data");saveImage(mBitmap, getFinalPicFile());// 从截取相册头像返回// 判断文件长度不为0,用户执行了截取图片操作if (mFinalPicFile.length() != 0f) {// 在截取好的本地图片上传到服务器上// updateUserAvatar(mFinalPicFile);Bitmap bm = BitmapFactory.decodeFile(mFinalPicFile.getPath());mAvatar.setImageBitmap(bm);}}}}/** * 裁剪图片 *  * @param uri * @param num_position */private void zoomPhoto(Uri uri, int num_position) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");intent.putExtra("crop", "true");intent.putExtra("scale", true); // 设置是否允许拉伸// aspectX aspectY 是宽高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX outputY 是裁剪图片宽高intent.putExtra("outputX", 256);intent.putExtra("outputY", 256);intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());// 设置输出格式intent.putExtra("return-data", true);// 这里必须要加1000startActivityForResult(intent, num_position + 1000);}/** * 获取剪切后图片的缓存路径 *  * @return */private File getFinalPicFile() {// 临时文件名String temp = GetPicUtil.getPhotoFileName();/** * files下pictures的路径,String为文件夹名 *  * 即:/mnt/sdcard/Android/data/'包名'/files/Pictures/'String' */File dirFile = new File(this.getExternalFilesDir(Environment.DIRECTORY_PICTURES),"avatar");if (!dirFile.exists()) {if (!dirFile.mkdir())try {throw new Exception("目录不存在,创建失败!");} catch (Exception e) {e.printStackTrace();}}// 默认在sdcard根目录下 可以自定义目录mFinalPicFile = new File(dirFile.getPath() + File.separator + temp);// 出错点,输出流的真实输出文件,也要进行判断路径,不存在时,要进行创建。if (!mFinalPicFile.exists()) {try {mFinalPicFile.createNewFile();} catch (IOException e) {e.printStackTrace();}}return mFinalPicFile;}/** * 缓存图片 *  * @param bmp * @param file */private void saveImage(Bitmap bmp, File file) {file.mkdirs();try {FileOutputStream out = new FileOutputStream(file);bmp.compress(Bitmap.CompressFormat.JPEG, 100, out);out.flush();out.close();if (!file.exists()) {Toast.makeText(TestActivity.this, "文件路径出错", Toast.LENGTH_SHORT).show();}MediaScannerConnection.scanFile(this,new String[] { file.getAbsolutePath() }, null, null);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}


GetPicUtil.java

import java.io.File;import java.text.SimpleDateFormat;import java.util.Date;import android.annotation.SuppressLint;import android.app.Activity;import android.content.ActivityNotFoundException;import android.content.Intent;import android.net.Uri;import android.os.Environment;import android.provider.MediaStore;/** * 图片获取工具类 *  * @author Administrator *  */public class GetPicUtil{public static File mPhotoFile;public static String imageBasePath;public static void fromTakeAPhoto(Activity activity, int CAMERA_WITH_DATA){try{// 临时文件名String temp = getPhotoFileName();// 这里获得路径是项目在手机上安卓目录下,项目名下,files下pictures的路径,String为文件夹名File dirFile = new File(activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES),"qtx");if (!dirFile.exists()){if (!dirFile.mkdir())try{throw new Exception("目录不存在,创建失败!");} catch (Exception e){e.printStackTrace();}}// 默认在sdcard根目录下 可以自定义目录mPhotoFile = new File(dirFile.getPath() + File.separator + temp);Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(mPhotoFile));activity.startActivityForResult(cameraIntent, CAMERA_WITH_DATA + 1);} catch (ActivityNotFoundException e){e.printStackTrace();}}// 获取拍照获取图片名@SuppressLint("SimpleDateFormat")public static String getPhotoFileName(){Date date = new Date(System.currentTimeMillis());SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");return dateFormat.format(date) + ".jpg";}/** * 获取本地图片 *  * @param activity * @param requestCode */public static void getImgFromLocal(Activity activity, int requestCode){Intent localIntent = new Intent();localIntent.setAction(Intent.ACTION_PICK);localIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");activity.startActivityForResult(localIntent, requestCode);}}


0 0
原创粉丝点击