国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現從本地圖庫/相機拍照后裁剪圖片并設置頭像

2020-04-11 10:45:44
字體:
來源:轉載
供稿:網友

玩qq或者是微信的盆友都知道,這些聊天工具里都要設置頭像,一般情況下大家的解決辦法是從本地圖庫選擇圖片或是從相機拍照,然后根據自己的喜愛截取圖片。上述過程已經實現好了,最后一步我加上了把截取好的圖片在保存到本地的操作,來保存頭像。為了大家需要,下面武林網小編把完整的代碼貼出來供大家參考。

先給大家展示效果圖:

代碼部分:

布局代碼(其實就是兩個按鈕和一個ImageView來顯示頭像)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/buttonLocal"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="本地相冊選取頭像" /><Buttonandroid:id="@+id/buttonCamera"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="手機拍照選取頭像" /></LinearLayout> 

正文代碼:

public class MainActivity extends AppCompatActivity {/* 頭像文件 */private static final String IMAGE_FILE_NAME = "temp_head_image.jpg";/* 請求識別碼 */private static final int CODE_GALLERY_REQUEST = 0xa0;//本地private static final int CODE_CAMERA_REQUEST = 0xa1;//拍照private static final int CODE_RESULT_REQUEST = 0xa2;//最終裁剪后的結果// 裁剪后圖片的寬(X)和高(Y),480 X 480的正方形。private static int output_X = 600;private static int output_Y = 600;private ImageView headImage = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);headImage = (ImageView) findViewById(R.id.imageView);Button buttonLocal = (Button) findViewById(R.id.buttonLocal);buttonLocal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {choseHeadImageFromGallery();}});Button buttonCamera = (Button) findViewById(R.id.buttonCamera);buttonCamera.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {choseHeadImageFromCameraCapture();}});}// 從本地相冊選取圖片作為頭像private void choseHeadImageFromGallery() {Intent intentFromGallery = new Intent();// 設置文件類型intentFromGallery.setType("image/*");//選擇圖片intentFromGallery.setAction(Intent.ACTION_GET_CONTENT);//如果你想在Activity中得到新打開Activity關閉后返回的數據,//你需要使用系統提供的startActivityForResult(Intent intent,int requestCode)方法打開新的ActivitystartActivityForResult(intentFromGallery, CODE_GALLERY_REQUEST);}// 啟動手機相機拍攝照片作為頭像private void choseHeadImageFromCameraCapture() {Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 判斷存儲卡是否可用,存儲照片文件if (hasSdcard()) {intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), IMAGE_FILE_NAME)));}startActivityForResult(intentFromCapture, CODE_CAMERA_REQUEST);}@Overrideprotected void onActivityResult(int requestCode, int resultCode,Intent intent) {// 用戶沒有進行有效的設置操作,返回if (resultCode == RESULT_CANCELED) {//取消Toast.makeText(getApplication(), "取消", Toast.LENGTH_LONG).show();return;}switch (requestCode) {case CODE_GALLERY_REQUEST://如果是來自本地的cropRawPhoto(intent.getData());//直接裁剪圖片break;case CODE_CAMERA_REQUEST:if (hasSdcard()) {File tempFile = new File(Environment.getExternalStorageDirectory(),IMAGE_FILE_NAME);cropRawPhoto(Uri.fromFile(tempFile));} else {Toast.makeText(getApplication(), "沒有SDCard!", Toast.LENGTH_LONG).show();}break;case CODE_RESULT_REQUEST:if (intent != null) {setImageToHeadView(intent);//設置圖片框}break;}super.onActivityResult(requestCode, resultCode, intent);}/*** 裁剪原始的圖片*/public void cropRawPhoto(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", output_X);intent.putExtra("outputY", output_Y);intent.putExtra("return-data", true);startActivityForResult(intent, CODE_RESULT_REQUEST);}/*** 提取保存裁剪之后的圖片數據,并設置頭像部分的View*/private void setImageToHeadView(Intent intent) {Bundle extras = intent.getExtras();if (extras != null) {Bitmap photo = extras.getParcelable("data");headImage.setImageBitmap(photo);<br>       //新建文件夾 先選好路徑 再調用mkdir函數 現在是根目錄下面的Ask文件夾File nf = new File(Environment.getExternalStorageDirectory()+"/Ask");nf.mkdir();<br>       //在根目錄下面的ASk文件夾下 創建okkk.jpg文件File f = new File(Environment.getExternalStorageDirectory()+"/Ask", "okkk.jpg");FileOutputStream out = null;try {<br><br>          //打開輸出流 將圖片數據填入文件中out = new FileOutputStream(f);photo.compress(Bitmap.CompressFormat.PNG, 90, out);try {out.flush();out.close();} catch (IOException e) {e.printStackTrace();}} catch (FileNotFoundException e) {e.printStackTrace();}}}/*** 檢查設備是否存在SDCard的工具方法*/public static boolean hasSdcard() {String state = Environment.getExternalStorageState();if (state.equals(Environment.MEDIA_MOUNTED)) {// 有存儲的SDCardreturn true;} else {return false;}}}

因為涉及到文件讀寫,要加入兩個權限!??!

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 

關于本文給大家介紹的Android實現從本地圖庫/相機拍照后裁剪圖片并設置頭像的相關知識就給大家介紹到這里,希望對大家有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开江县| 嘉祥县| 洪泽县| 临漳县| 原平市| 繁昌县| 余干县| 蒙山县| 竹山县| 珲春市| 白水县| 唐河县| 舒城县| 中宁县| 锦州市| 深圳市| 赤壁市| 衡山县| 宿松县| 方山县| 富蕴县| 曲麻莱县| 宽甸| 舟山市| 临汾市| 都江堰市| 黎城县| 雷山县| 隆林| 工布江达县| 红安县| 铜鼓县| 灵寿县| 石屏县| 石狮市| 诏安县| 玉溪市| 巴彦县| 方城县| 孝感市| 平远县|