Android设置头像上传功能实现

转自:http://blog.csdn.net/scholar_man/article/details/48731321?ref=myread


在一般开发中上传图片作为头像的功能非常常见,下面我们研究下具体实现,代码很简单,大家可以直接拿来使用哦!

1.先看一下布局文件,很是丑陋:

[html]  view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.   
  6.     <ImageView  
  7.         android:id="@+id/image_header"  
  8.         android:layout_width="150dp"  
  9.         android:layout_height="150dp" />  
  10.   
  11.     <Button  
  12.         android:id="@+id/btn_selectimage"  
  13.         android:layout_width="wrap_content"  
  14.         android:layout_height="wrap_content"  
  15.         android:layout_below="@+id/image_header"  
  16.         android:text="相册" />  
  17.   
  18.     <Button  
  19.         android:id="@+id/btn_takephoto"  
  20.         android:layout_width="wrap_content"  
  21.         android:layout_height="wrap_content"  
  22.         android:layout_below="@+id/btn_selectimage"  
  23.         android:text="拍照" />  
  24.   
  25. </RelativeLayout>  
2.MainActivity.java:

[java]  view plain copy
  1. package com.example.userphoto;  
  2.   
  3. import java.io.File;  
  4.   
  5. import android.net.Uri;  
  6. import android.os.Bundle;  
  7. import android.os.Environment;  
  8. import android.provider.MediaStore;  
  9. import android.app.Activity;  
  10. import android.content.Intent;  
  11. import android.graphics.Bitmap;  
  12. import android.graphics.drawable.BitmapDrawable;  
  13. import android.graphics.drawable.Drawable;  
  14. import android.view.View;  
  15. import android.view.View.OnClickListener;  
  16. import android.widget.Button;  
  17. import android.widget.ImageView;  
  18. import android.widget.Toast;  
  19.   
  20. public class MainActivity extends Activity implements OnClickListener {  
  21.     private static final int IMAGE_REQUEST_CODE = 0;  
  22.     private static final int CAMERA_REQUEST_CODE = 1;  
  23.     private static final int RESIZE_REQUEST_CODE = 2;  
  24.   
  25.     private static final String IMAGE_FILE_NAME = "header.jpg";  
  26.   
  27.     private ImageView mImageHeader;  
  28.   
  29.     @Override  
  30.     protected void onCreate(Bundle savedInstanceState) {  
  31.         super.onCreate(savedInstanceState);  
  32.         setContentView(R.layout.activity_main);  
  33.   
  34.         setupViews();  
  35.     }  
  36.   
  37.     private void setupViews() {  
  38.         mImageHeader = (ImageView) findViewById(R.id.image_header);  
  39.         final Button selectBtn1 = (Button) findViewById(R.id.btn_selectimage);  
  40.         final Button selectBtn2 = (Button) findViewById(R.id.btn_takephoto);  
  41.         selectBtn1.setOnClickListener(this);  
  42.         selectBtn2.setOnClickListener(this);  
  43.     }  
  44.   
  45.     @Override  
  46.     public void onClick(View v) {  
  47.         switch (v.getId()) {  
  48.         case R.id.btn_selectimage:  
  49.             Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);  
  50.             galleryIntent.addCategory(Intent.CATEGORY_OPENABLE);  
  51.             galleryIntent.setType("image/*");//图片  
  52.             startActivityForResult(galleryIntent, IMAGE_REQUEST_CODE);  
  53.             break;  
  54.         case R.id.btn_takephoto:  
  55.             if (isSdcardExisting()) {  
  56.                 Intent cameraIntent = new Intent(  
  57.                         "android.media.action.IMAGE_CAPTURE");//拍照  
  58.                 cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri());  
  59.                 cameraIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);  
  60.                 startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE);  
  61.             } else {  
  62.                 Toast.makeText(v.getContext(), "请插入sd卡", Toast.LENGTH_LONG)  
  63.                         .show();  
  64.             }  
  65.             break;  
  66.         }  
  67.     }  
  68.   
  69.     @Override  
  70.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  71.         if (resultCode != RESULT_OK) {  
  72.             return;  
  73.         } else {  
  74.             switch (requestCode) {  
  75.             case IMAGE_REQUEST_CODE:  
  76.                 resizeImage(data.getData());  
  77.                 break;  
  78.             case CAMERA_REQUEST_CODE:  
  79.                 if (isSdcardExisting()) {  
  80.                     resizeImage(getImageUri());  
  81.                 } else {  
  82.                     Toast.makeText(MainActivity.this"未找到存储卡,无法存储照片!",  
  83.                             Toast.LENGTH_LONG).show();  
  84.                 }  
  85.                 break;  
  86.   
  87.             case RESIZE_REQUEST_CODE:  
  88.                 if (data != null) {  
  89.                     showResizeImage(data);  
  90.                 }  
  91.                 break;  
  92.             }  
  93.         }  
  94.   
  95.         super.onActivityResult(requestCode, resultCode, data);  
  96.     }  
  97.   
  98.     private boolean isSdcardExisting() {//判断SD卡是否存在  
  99.         final String state = Environment.getExternalStorageState();  
  100.         if (state.equals(Environment.MEDIA_MOUNTED)) {  
  101.             return true;  
  102.         } else {  
  103.             return false;  
  104.         }  
  105.     }  
  106.   
  107.     public void resizeImage(Uri uri) {//重塑图片大小  
  108.         Intent intent = new Intent("com.android.camera.action.CROP");  
  109.         intent.setDataAndType(uri, "image/*");  
  110.         intent.putExtra("crop""true");//可以裁剪  
  111.         intent.putExtra("aspectX"1);  
  112.         intent.putExtra("aspectY"1);  
  113.         intent.putExtra("outputX"150);  
  114.         intent.putExtra("outputY"150);  
  115.         intent.putExtra("return-data"true);  
  116.         startActivityForResult(intent, RESIZE_REQUEST_CODE);  
  117.     }  
  118.   
  119.     private void showResizeImage(Intent data) {//显示图片  
  120.         Bundle extras = data.getExtras();  
  121.         if (extras != null) {  
  122.             Bitmap photo = extras.getParcelable("data");  
  123.             Drawable drawable = new BitmapDrawable(photo);  
  124.             mImageHeader.setImageDrawable(drawable);  
  125.         }  
  126.     }  
  127.   
  128.     private Uri getImageUri() {//获取路径  
  129.         return Uri.fromFile(new File(Environment.getExternalStorageDirectory(),  
  130.                 IMAGE_FILE_NAME));  
  131.     }  
  132. }  

3.运行实例就行了:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值