Effects such as the following:
Look at the code:
In the Mainactivity class:
Package Com.example.ceshidemo;import Java.io.bytearrayoutputstream;import Java.io.file;import Java.io.fileoutputstream;import Java.util.calendar;import Android.app.activity;import Android.app.AlertDialog; Import Android.content.context;import Android.content.dialoginterface;import Android.content.intent;import Android.graphics.bitmap;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.view.onclicklistener;import Android.widget.button;import Android.widget.toast;public Class Mainactivity extends Activity {private static final int photo_request_carema = 1;private static final int Photo_request_ga Llery = 2;private static final int photo_request_cut = 3;private static final String photo_file_name = "Temp_photo.jpg";p R Ivate File tempfile;private circleimageview headicon; @Overridepublic void OnCreate (Bundle savedinstancestate) { Super.oncreate (savedinstancestate); SETcontentview (R.layout.activity_main); Initview ();} private void Initview () {Headicon = (Circleimageview) Findviewbyid (R.id.headicon); Headicon.setonclicklistener (new Onclicklistener () {@Overridepublic void OnClick (View v) {//TODO auto-generated method Stubchangeheadicon ();}); Changetheme (); File File = new file (MainActivity.this.getFilesDir (), "_head_icon.jpg"), if (File.exists ()) {Headicon.setimageuri ( Uri.fromfile (file));}} private void Changetheme () {Calendar c = calendar.getinstance (); System.out.println (C.get (calendar.hour_of_day)); if (C.get (Calendar.hour_of_day) < && C.get ( Calendar.hour_of_day) >= 6) {Headicon.setimageresource (r.drawable.ic_hehe);} else {Headicon.setimageresource ( R.drawable.ic_launcher);}} private void Changeheadicon () {final charsequence[] items = {"album", "Photo"}; Alertdialog dlg = new Alertdialog.builder (mainactivity.this). Settitle ("select Picture"). Setitems (Items, new Dialoginterface.onclicklistener () {public void OnClick (dialoginterface dialog, int item) {//Here ITEM is based on the choice of mode. if (item = = 0) {Intent Intent = new Intent (Intent.action_pick); Intent.settype ("image/*"); Startactivityforresult (Intent , photo_request_gallery);} else {Intent Intent = new Intent (mediastore.action_image_capture), if (Environment.getexternalstoragestate (). Equals ( environment.media_mounted) {tempfile = new File (Environment.getexternalstoragedirectory (), photo_file_name); Uri uri = uri.fromfile (tempfile); Intent.putextra (Mediastore.extra_output, URI); Startactivityforresult (Intent,PHOTO _request_carema);} else {toast.maketext (mainactivity.this, "No memory card found, no photos saved! ", Toast.length_short). Show ();}}}). Create ();d lg.show ();} @Overridepublic void Onactivityresult (int requestcode, int resultcode, Intent data) {Super.onactivityresult ( Requestcode, ResultCode, data); if (Requestcode = = photo_request_gallery) {if (data! = null) {URI uri = Data.getdata (); LOG.E ("Picture path?? ", Data.getdata () +" "); crop (URI);}} else if (Requestcode = = Photo_request_carema) {if (Environment.getexternalstoragestate (). Equals (EnviROnment. media_mounted) {crop (Uri.fromfile (tempfile))} else {Toast.maketext (mainactivity.this, "No memory card found, no photos saved!
", Toast.length_short). Show ();}} else if (Requestcode = = photo_request_cut) {if (data! = NULL) {final Bitmap Bitmap = Data.getparcelableextra ("data"); Headi Con.setimagebitmap (bitmap);//Save picture to internal Storagefileoutputstream outputstream;try {Bytearrayoutputstream out = new Bytearrayoutputstream (); Bitmap.compress (Bitmap.CompressFormat.JPEG, +, out); Out.flush ();//Out.close ();//FINAL byte[] buffer = Out.tobytearray ();//outputstream.write (buffer); outputstream = MainActivity.this.openFileOutput ("_ Head_icon.jpg ", context.mode_private); Out.writeto (OutputStream); Out.close (); Outputstream.close ();} catch (Exception e) {e.printstacktrace ();}} try {if (tempfile! = null && tempfile.exists ())) Tempfile.delete ();} catch (Exception e) {e.printstacktrace ();}}} private void crop (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 ("OutpIntent.putextra ("Outputy", "UtX"), Intent.putextra ("OutputFormat", "JPEG"); Intent.putextra (" Nofacedetection ", true); Intent.putextra (" Return-data ", true); Startactivityforresult (Intent, Photo_request_cut);}}
I've set up a circular view:circleimageview here.
Package Com.example.ceshidemo;import Android.content.context;import Android.content.res.typedarray;import Android.graphics.bitmap;import Android.graphics.bitmapshader;import Android.graphics.canvas;import Android.graphics.color;import Android.graphics.matrix;import Android.graphics.paint;import Android.graphics.RectF ; Import Android.graphics.shader;import Android.graphics.drawable.bitmapdrawable;import Android.graphics.drawable.colordrawable;import Android.graphics.drawable.drawable;import Android.net.Uri;import Android.util.attributeset;import Android.widget.imageview;public class Circleimageview extends ImageView{private Static final ScaleType scale_type = Scaletype.center_crop; private static final Bitmap.config bitmap_config = Bitmap.Config.ARGB_8888; private static final int colordrawable_dimension = 1; private static final int default_border_width = 0; private static final int default_border_color = Color.Black; Private final RECTF mdrawablerect = new RECTF (); Private final RECTF mborderrect = new RECTF (); Private final Matrix Mshadermatrix = new Matrix (); Private final paint Mbitmappaint = new paint (); Private final paint Mborderpaint = new paint (); private int mbordercolor = Default_border_color; private int mborderwidth = Default_border_width; Private Bitmap Mbitmap; Private Bitmapshader Mbitmapshader; private int mbitmapwidth; private int mbitmapheight; private float Mdrawableradius; private float Mborderradius; Private Boolean Mready; Private Boolean msetuppending; Public Circleimageview (Context context) {super (context); Init (); } public Circleimageview (context context, AttributeSet Attrs) {This (context, attrs, 0); } public Circleimageview (context context, AttributeSet attrs, int defstyle) {Super (context, attrs, Defstyle); TypedArray a = Context.obtainstyledattributes (Attrs, R.styleable.circleimageview, Defstyle, 0); Mborderwidth = A.getDimensionpixelsize (R.styleable.circleimageview_border_width, default_border_width); Mbordercolor = A.getcolor (R.styleable.circleimageview_border_color, Default_border_color); A.recycle (); Init (); } private void Init () {super.setscaletype (scale_type); Mready = true; if (msetuppending) {setup (); Msetuppending = false; }} @Override public ScaleType Getscaletype () {return scale_type; } @Override public void Setscaletype (ScaleType scaletype) {if (ScaleType! = scale_type) {throw n EW IllegalArgumentException (String.Format ("ScaleType%s not supported.", ScaleType)); }} @Override protected void OnDraw (canvas canvas) {if (getdrawable () = = null) {return; } canvas.drawcircle (GetWidth ()/2, GetHeight ()/2, Mdrawableradius, mbitmappaint); if (mborderwidth! = 0) {canvas.drawcircle (GetWidth ()/2, GetHeight()/2, Mborderradius, mborderpaint); }} @Override protected void onsizechanged (int w, int h, int oldw, int oldh) {super.onsizechanged (W, H, O LDW, OLDH); Setup (); } public int Getbordercolor () {return mbordercolor; } public void setBorderColor (int bordercolor) {if (bordercolor = = Mbordercolor) {return; } Mbordercolor = bordercolor; Mborderpaint.setcolor (Mbordercolor); Invalidate (); } public int Getborderwidth () {return mborderwidth; } public void Setborderwidth (int borderWidth) {if (borderWidth = = mborderwidth) {return; } mborderwidth = BorderWidth; Setup (); } @Override public void Setimagebitmap (Bitmap bm) {Super.setimagebitmap (BM); Mbitmap = BM; Setup (); } @Override public void setimagedrawable (drawable drawable) {super.setimagedrawable (drawable); Mbitmap = GETBITMAPFROMDRawable (drawable); Setup (); } @Override public void Setimageresource (int resId) {super.setimageresource (resId); Mbitmap = Getbitmapfromdrawable (getdrawable ()); Setup (); } @Override public void Setimageuri (Uri uri) {Super.setimageuri (URI); Mbitmap = Getbitmapfromdrawable (getdrawable ()); Setup (); } private Bitmap getbitmapfromdrawable (drawable drawable) {if (drawable = = null) {return null; } if (drawable instanceof bitmapdrawable) {return ((bitmapdrawable) drawable). Getbitmap (); } try {Bitmap Bitmap; if (drawable instanceof colordrawable) {bitmap = Bitmap.createbitmap (Colordrawable_dimension, COLORDRAWABL E_dimension, Bitmap_config); } else {bitmap = Bitmap.createbitmap (Drawable.getintrinsicwidth (), Drawable.getintrinsicheight (), Bitmap_c Onfig); Canvas canvas = new CaNvas (bitmap); Drawable.setbounds (0, 0, canvas.getwidth (), Canvas.getheight ()); Drawable.draw (canvas); return bitmap; } catch (OutOfMemoryError e) {return null; }} private void Setup () {if (!mready) {msetuppending = true; Return } if (Mbitmap = = null) {return; } Mbitmapshader = new Bitmapshader (Mbitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); Mbitmappaint.setantialias (TRUE); Mbitmappaint.setshader (Mbitmapshader); Mborderpaint.setstyle (Paint.Style.STROKE); Mborderpaint.setantialias (TRUE); Mborderpaint.setcolor (Mbordercolor); Mborderpaint.setstrokewidth (Mborderwidth); Mbitmapheight = Mbitmap.getheight (); Mbitmapwidth = Mbitmap.getwidth (); Mborderrect.set (0, 0, getwidth (), getheight ()); Mborderradius = Math.min ((mborderrect.height ()-mborderwidth)/2, (Mborderrect.width ()-MBOrderwidth)/2); Mdrawablerect.set (Mborderwidth, Mborderwidth, Mborderrect.width ()-Mborderwidth, Mborderrect.height ()-MBorderWidth ); Mdrawableradius = Math.min (Mdrawablerect.height ()/2, Mdrawablerect.width ()/2); Updateshadermatrix (); Invalidate (); } private void Updateshadermatrix () {float scale; float dx = 0; float dy = 0; Mshadermatrix.set (NULL); if (Mbitmapwidth * mdrawablerect.height () > Mdrawablerect.width () * mbitmapheight) {scale = MDrawableRect.h Eight ()/(float) mbitmapheight; DX = (mdrawablerect.width ()-mbitmapwidth * scale) * 0.5f; } else {scale = Mdrawablerect.width ()/(float) mbitmapwidth; DY = (mdrawablerect.height ()-mbitmapheight * scale) * 0.5f; } mshadermatrix.setscale (scale, scale); Mshadermatrix.posttranslate ((int) (dx + 0.5f) + mborderwidth, (int) (dy + 0.5f) + mborderwidth); Mbitmapshader.setlocalmatRix (Mshadermatrix); }}
Main_activity.xml file:
<?XML version= "1.0" encoding= "Utf-8"? ><linearlayout xmlns:android= "Http://schemas.android.com/apk/res/android " xmlns:circleimageview=" Http://schemas.android.com/apk/res/com.example.ceshidemo " android:layout_ Width= "Fill_parent" android:layout_height= "fill_parent" android:orientation= "vertical" > < TextView android:id= "@+id/bt_photo" android:layout_width= "wrap_content" android:layout_height= " Wrap_content " android:text=" photo or select Picture "> </TextView> < Com.example.ceshidemo.CircleImageView android:id= "@+id/headicon" android:layout_width= "65DP " android:layout_height= "65DP" android:layout_gravity= "center" android:layout_marginbottom= "8DP" Circleimageview:border_color= "#ffffff" circleimageview:border_width= "1DP"/></linearlayout>
Define the properties file for the circle yourself:
<?xml version= "1.0" encoding= "Utf-8"?><resources> <declare-styleable name= "donutprogress" > < ; attr name= "donut_progress" format= "integer"/> <attr name= "Donut_max" format= "integer"/> <attr n Ame= "Donut_unfinished_color" format= "color"/> <attr name= "donut_finished_color" format= "Color"/> &L T;attr name= "Donut_finished_stroke_width" format= "Dimension"/> <attr name= "Donut_unfinished_stroke_width" for mat= "Dimension"/> <attr name= "donut_text_size" format= "Dimension"/> <attr name= "Donut_text_color "format=" Color "/> <attr name=" Donut_prefix_text "format=" string "/> <attr name=" Donut_suffix_tex T "format=" string "/> <attr name=" donut_background_color "format=" Color "/> </declare-styleable> <declare-styleable name= "Circleimageview" > <attr name= "border_width" format= "Dimension"/> < attr name= "Border_color" format= "Color"/> </declare-styleable></resources>
Above all the code, click on the demo download test: http://download.csdn.net/detail/onceing/8884045
Android settings take photos or upload local images