Android settings take photos or upload local images

Source: Internet
Author: User

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" > &lt ; 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

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.