您的位置:首页 > 移动开发 > Android开发

Android实战简易教程<二十七>(Android设置头像上传功能实现)

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

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

[html] view
plaincopy

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent" >



<ImageView

android:id="@+id/image_header"

android:layout_width="150dp"

android:layout_height="150dp" />



<Button

android:id="@+id/btn_selectimage"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/image_header"

android:text="相册" />



<Button

android:id="@+id/btn_takephoto"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/btn_selectimage"

android:text="拍照" />



</RelativeLayout>

2.MainActivity.java:

[java] view
plaincopy

package com.example.userphoto;



import java.io.File;



import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.provider.MediaStore;

import android.app.Activity;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.drawable.BitmapDrawable;

import android.graphics.drawable.Drawable;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.Toast;



public class MainActivity extends Activity implements OnClickListener {

private static final int IMAGE_REQUEST_CODE = 0;

private static final int CAMERA_REQUEST_CODE = 1;

private static final int RESIZE_REQUEST_CODE = 2;



private static final String IMAGE_FILE_NAME = "header.jpg";



private ImageView mImageHeader;



@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);



setupViews();

}



private void setupViews() {

mImageHeader = (ImageView) findViewById(R.id.image_header);

final Button selectBtn1 = (Button) findViewById(R.id.btn_selectimage);

final Button selectBtn2 = (Button) findViewById(R.id.btn_takephoto);

selectBtn1.setOnClickListener(this);

selectBtn2.setOnClickListener(this);

}



@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_selectimage:

Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);

galleryIntent.addCategory(Intent.CATEGORY_OPENABLE);

galleryIntent.setType("image/*");//图片

startActivityForResult(galleryIntent, IMAGE_REQUEST_CODE);

break;

case R.id.btn_takephoto:

if (isSdcardExisting()) {

Intent cameraIntent = new Intent(

"android.media.action.IMAGE_CAPTURE");//拍照

cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri());

cameraIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);

startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE);

} else {

Toast.makeText(v.getContext(), "请插入sd卡", Toast.LENGTH_LONG)

.show();

}

break;

}

}



@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode != RESULT_OK) {

return;

} else {

switch (requestCode) {

case IMAGE_REQUEST_CODE:

resizeImage(data.getData());

break;

case CAMERA_REQUEST_CODE:

if (isSdcardExisting()) {

resizeImage(getImageUri());

} else {

Toast.makeText(MainActivity.this, "未找到存储卡,无法存储照片!",

Toast.LENGTH_LONG).show();

}

break;



case RESIZE_REQUEST_CODE:

if (data != null) {

showResizeImage(data);

}

break;

}

}



super.onActivityResult(requestCode, resultCode, data);

}



private boolean isSdcardExisting() {//判断SD卡是否存在

final String state = Environment.getExternalStorageState();

if (state.equals(Environment.MEDIA_MOUNTED)) {

return true;

} else {

return false;

}

}



public void resizeImage(Uri uri) {//重塑图片大小

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(uri, "image/*");

intent.putExtra("crop", "true");//可以裁剪

intent.putExtra("aspectX", 1);

intent.putExtra("aspectY", 1);

intent.putExtra("outputX", 150);

intent.putExtra("outputY", 150);

intent.putExtra("return-data", true);

startActivityForResult(intent, RESIZE_REQUEST_CODE);

}



private void showResizeImage(Intent data) {//显示图片

Bundle extras = data.getExtras();

if (extras != null) {

Bitmap photo = extras.getParcelable("data");

Drawable drawable = new BitmapDrawable(photo);

mImageHeader.setImageDrawable(drawable);

}

}



private Uri getImageUri() {//获取路径

return Uri.fromFile(new File(Environment.getExternalStorageDirectory(),

IMAGE_FILE_NAME));

}

}

3.运行实例就行了:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐