功能介绍

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

界面设计

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

  

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#F3F1DA"android:orientation="vertical"><!--title--><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:background="@drawable/title_bg"android:gravity="center"android:orientation="horizontal"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center"android:text="@string/title_bar_txt"android:textColor="@android:color/white"/></LinearLayout><!--imageswitch--><RelativeLayoutandroid: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"><ImageViewandroid:id="@+id/face"android:layout_width="42dip"android:layout_height="42dip"android:layout_alignParentLeft="true"android:layout_marginLeft="10dip"android:src="@drawable/mini_avatar"/><TextViewandroid: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:

packagecom.xzw.picture;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importcom.xzw.utils.Tools;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.content.DialogInterface;importandroid.content.Intent;importandroid.graphics.Bitmap;importandroid.graphics.drawable.BitmapDrawable;importandroid.graphics.drawable.Drawable;importandroid.net.Uri;importandroid.os.Bundle;importandroid.os.Environment;importandroid.provider.MediaStore;importandroid.util.Log;importandroid.view.View;importandroid.view.Window;importandroid.widget.ImageView;importandroid.widget.RelativeLayout;importandroid.widget.Toast;/****@authorXuZhiwei([email protected])Createat2012-8-17上午10:14:40*/publicclassMainActivityextendsActivity{/*组件*/privateRelativeLayoutswitchAvatar;privateImageViewfaceImage;privateString[]items=newString[]{"选择本地图片","拍照"};/*头像名称*/privatestaticfinalStringIMAGE_FILE_NAME="faceImage.jpg";/*请求码*/privatestaticfinalintIMAGE_REQUEST_CODE=0;privatestaticfinalintCAMERA_REQUEST_CODE=1;privatestaticfinalintRESULT_REQUEST_CODE=2;@OverridepublicvoidonCreate(BundlesavedInstanceState){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);}privateView.OnClickListenerlistener=newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){showDialog();}};/***显示选择对话框*/privatevoidshowDialog(){newAlertDialog.Builder(this).setTitle("设置头像").setItems(items,newDialogInterface.OnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){switch(which){case0:IntentintentFromGallery=newIntent();intentFromGallery.setType("image/*");//设置文件类型intentFromGallery.setAction(Intent.ACTION_GET_CONTENT);startActivityForResult(intentFromGallery,IMAGE_REQUEST_CODE);break;case1:IntentintentFromCapture=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);//判断存储卡是否可以用,可用进行存储if(Tools.hasSdcard()){Filepath=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);Filefile=newFile(path,IMAGE_FILE_NAME);intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(file));}startActivityForResult(intentFromCapture,CAMERA_REQUEST_CODE);break;}}}).setNegativeButton("取消",newDialogInterface.OnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){dialog.dismiss();}}).show();}@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){//结果码不等于取消时候if(resultCode!=RESULT_CANCELED){switch(requestCode){caseIMAGE_REQUEST_CODE:startPhotoZoom(data.getData());break;caseCAMERA_REQUEST_CODE:if(Tools.hasSdcard()){Filepath=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);FiletempFile=newFile(path,IMAGE_FILE_NAME);startPhotoZoom(Uri.fromFile(tempFile));}else{Toast.makeText(MainActivity.this,"未找到存储卡,无法存储照片!",Toast.LENGTH_LONG).show();}break;caseRESULT_REQUEST_CODE://图片缩放完成后if(data!=null){getImageToView(data);}break;}}super.onActivityResult(requestCode,resultCode,data);}/***裁剪图片方法实现**@paramuri*/publicvoidstartPhotoZoom(Uriuri){Intentintent=newIntent("com.android.camera.action.CROP");intent.setDataAndType(uri,"image/*");//设置裁剪intent.putExtra("crop","true");//aspectXaspectY是宽高的比例intent.putExtra("aspectX",1);intent.putExtra("aspectY",1);//outputXoutputY是裁剪图片宽高intent.putExtra("outputX",340);intent.putExtra("outputY",340);intent.putExtra("return-data",true);startActivityForResult(intent,RESULT_REQUEST_CODE);}/***保存裁剪之后的图片数据**@parampicdata*/privatevoidgetImageToView(Intentdata){Bundleextras=data.getExtras();if(extras!=null){Bitmapphoto=extras.getParcelable("data");Drawabledrawable=newBitmapDrawable(this.getResources(),photo);faceImage.setImageDrawable(drawable);}}}

Tools.java

packagecom.xzw.utils;importandroid.os.Environment;/****@authorXuZhiwei([email protected])*Createat2012-8-17上午10:14:40*/publicclassTools{/***检查是否存在SDCard*@return*/publicstaticbooleanhasSdcard(){Stringstate=Environment.getExternalStorageState();if(state.equals(Environment.MEDIA_MOUNTED)){returntrue;}else{returnfalse;}}}


更多相关文章

  1. Android动画介绍汇总
  2. TextView获取父控件的绘图状态
  3. Android一个TextView设置多种颜色的2种高效方法
  4. Mono for Android(安卓)实现高效的导航
  5. Android中通知的使用
  6. Android(安卓)中 ListView 控件的使用
  7. permission大全及场景的用法
  8. android登录界面
  9. TabLayout实现ViewPager指示器

随机推荐

  1. Android系统的图标设计规范 icon 大小
  2. Android: NDK编程
  3. [置顶] 历时一年,我的著作《第一行代码—
  4. Android百度地图HelloWorld运行异常处理
  5. 34.如何获取app(apk和ipa)中的资源
  6. android中在Layout布局文件中添加控件ID,
  7. Android开机广播无效问题(手机Root后)
  8. Android色彩矩阵——ColorMatrix
  9. Android(安卓)实现沉浸式状态栏
  10. 【腾讯bugly干货】关于 Android(安卓)N