星空网 > 软件开发 > 操作系统

(转)android头像设置:从本地照片库或拍照获取并剪裁

本文转载于:http://blog.csdn.net/sheeprunning/article/details/9184021

功能介绍

        制作android应用时,用户注册的功能必不可少,往往还需要具备用户头像的编辑功能,设置过程如下图:

(转)android头像设置:从本地照片库或拍照获取并剪裁images/loading.gif' data-original="http://img.blog.csdn.net/20130627075418812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWlhb21pYW80Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

        界面设计

        建立一个缩略图ImageView,点击时,弹出设置头像的对话框,设置完成后,刷新缩略图;

  

<LinearLayout ="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:background="#F3F1DA"  android:orientation="vertical" >  <!-- title -->  <LinearLayout    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:layout_gravity="center"    android:background="@drawable/title_bg"    android:gravity="center"    android:orientation="horizontal" >    <TextView      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:gravity="center"      android:text="@string/title_bar_txt"      android:textColor="@android:color/white" />  </LinearLayout>  <!-- image switch -->  <RelativeLayout    android:id="@+id/switch_face_rl"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:layout_gravity="center"    android:layout_margin="20dip"    android:background="@drawable/item_edit_bg"    android:clickable="true"     android:padding="5dip" >    <ImageView      android:id="@+id/face"      android:layout_width="42dip"      android:layout_height="42dip"      android:layout_alignParentLeft="true"      android:layout_marginLeft="10dip"      android:src='/images/loading.gif' data-original="@drawable/mini_avatar" />    <TextView      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_marginLeft="5dip"      android:layout_marginTop="5dip"      android:layout_toRightOf="@id/face"      android:layout_gravity="center"      android:text="点击设置头像"      android:textColor="@android:color/black" />   </RelativeLayout></LinearLayout>

 Activity设计

 MainActivity.java:

package com.xzw.picture;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import com.xzw.utils.Tools;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.util.Log;import android.view.View;import android.view.Window;import android.widget.ImageView;import android.widget.RelativeLayout;import android.widget.Toast;/** * * @author XuZhiwei (xuzw13@gmail.com) Create at 2012-8-17 上午10:14:40 */public class MainActivity extends Activity {  /* 组件 */  private RelativeLayout switchAvatar;  private ImageView faceImage;  private String[] items = new String[] { "选择本地图片", "拍照" };  /* 头像名称 */  private static final String IMAGE_FILE_NAME = "faceImage.jpg";  /* 请求码 */  private static final int IMAGE_REQUEST_CODE = 0;  private static final int CAMERA_REQUEST_CODE = 1;  private static final int RESULT_REQUEST_CODE = 2;  @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    requestWindowFeature(Window.FEATURE_NO_TITLE); // 去掉标题    setContentView(R.layout.main);    switchAvatar = (RelativeLayout) findViewById(R.id.switch_face_rl);    faceImage = (ImageView) findViewById(R.id.face);    // 设置事件监听    switchAvatar.setOnClickListener(listener);  }  private View.OnClickListener listener = new View.OnClickListener() {    @Override    public void onClick(View v) {      showDialog();    }  };  /**   * 显示选择对话框   */  private void showDialog() {    new AlertDialog.Builder(this)        .setTitle("设置头像")        .setItems(items, new DialogInterface.OnClickListener() {          @Override          public void onClick(DialogInterface dialog, int which) {            switch (which) {            case 0:              Intent intentFromGallery = new Intent();              intentFromGallery.setType("image/*"); // 设置文件类型              intentFromGallery                  .setAction(Intent.ACTION_GET_CONTENT);              startActivityForResult(intentFromGallery,                  IMAGE_REQUEST_CODE);              break;            case 1:              Intent intentFromCapture = new Intent(                  MediaStore.ACTION_IMAGE_CAPTURE);              // 判断存储卡是否可以用,可用进行存储              if (Tools.hasSdcard()) {                File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);                File file = new File(path,IMAGE_FILE_NAME);                intentFromCapture.putExtra(                    MediaStore.EXTRA_OUTPUT,                    Uri.fromFile(file));              }              startActivityForResult(intentFromCapture,CAMERA_REQUEST_CODE);              break;            }          }        })        .setNegativeButton("取消", new DialogInterface.OnClickListener() {          @Override          public void onClick(DialogInterface dialog, int which) {            dialog.dismiss();          }        }).show();  }  @Override  protected void onActivityResult(int requestCode, int resultCode, Intent data) {    //结果码不等于取消时候    if (resultCode != RESULT_CANCELED) {      switch (requestCode) {      case IMAGE_REQUEST_CODE:        startPhotoZoom(data.getData());        break;      case CAMERA_REQUEST_CODE:        if (Tools.hasSdcard()) {          File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);          File tempFile = new File(path,IMAGE_FILE_NAME);          startPhotoZoom(Uri.fromFile(tempFile));        } else {          Toast.makeText(MainActivity.this, "未找到存储卡,无法存储照片!",Toast.LENGTH_LONG).show();        }        break;      case RESULT_REQUEST_CODE: //图片缩放完成后        if (data != null) {          getImageToView(data);        }        break;      }    }    super.onActivityResult(requestCode, resultCode, data);  }  /**   * 裁剪图片方法实现   *   * @param uri   */  public void startPhotoZoom(Uri uri) {    Intent intent = new Intent("com.android.camera.action.CROP");    intent.setDataAndType(uri, "image/*");    // 设置裁剪    intent.putExtra("crop", "true");    // aspectX aspectY 是宽高的比例    intent.putExtra("aspectX", 1);    intent.putExtra("aspectY", 1);    // outputX outputY 是裁剪图片宽高    intent.putExtra("outputX", 340);    intent.putExtra("outputY", 340);    intent.putExtra("return-data", true);    startActivityForResult(intent, RESULT_REQUEST_CODE);  }  /**   * 保存裁剪之后的图片数据   *   * @param picdata   */  private void getImageToView(Intent data) {    Bundle extras = data.getExtras();    if (extras != null) {      Bitmap photo = extras.getParcelable("data");      Drawable drawable = new BitmapDrawable(this.getResources(),photo);      faceImage.setImageDrawable(drawable);    }  }}

 

  Tools.java

package com.xzw.utils;import android.os.Environment;/** * * @author XuZhiwei (xuzw13@gmail.com) * Create at 2012-8-17 上午10:14:40 */public class Tools {  /**   * 检查是否存在SDCard   * @return   */  public static boolean hasSdcard(){    String state = Environment.getExternalStorageState();    if(state.equals(Environment.MEDIA_MOUNTED)){      return true;    }else{      return false;    }  }}

 




原标题:(转)android头像设置:从本地照片库或拍照获取并剪裁

关键词:Android

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

国内快递怎么寄到泰国:https://www.goluckyvip.com/tag/103915.html
快递邮寄泰国:https://www.goluckyvip.com/tag/103916.html
泰国邮寄快递:https://www.goluckyvip.com/tag/103917.html
邮寄泰国快递:https://www.goluckyvip.com/tag/103918.html
专线物流 泰国:https://www.goluckyvip.com/tag/103919.html
寄泰国哪个快递公司:https://www.goluckyvip.com/tag/103921.html
instagram竞品“TikTok Notes”在加拿大和澳大利亚上线:https://www.kjdsnews.com/a/1842224.html
instagram竞品“TikTok Notes”在加拿大和澳大利亚上线:https://www.goluckyvip.com/news/220211.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流