1. 程式人生 > >android圓形頭像:相機裁剪+相簿選擇

android圓形頭像:相機裁剪+相簿選擇

這裡我們呼叫的都是系統提供的類,所以使用起來非常簡單;

每次點選圓形頭像都會彈出一個PopupWindow,可以點選“拍照”,“手機相簿”和"取消";

1,當點選"拍照"時開啟系統拍照頁面,拍照完成 成功接收圖片以後 攜帶資料 開啟 圖片裁剪頁面,裁剪完成  成功接收圖片顯示到view上面;

2,當點選"手機相簿"時 開啟系統相簿選擇頁面,選擇完成以後獲取圖片路徑,顯示到view上面;

開啟系統拍照的介面:

//啟動拍照
    private void startCameraActivity() {
        //獲取當前File物件的絕對路徑名的字串形式
        String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
        //宣告new file並不會建立檔案或資料夾
        mOutputFile = new File(sdPath, System.currentTimeMillis() + ".tmp");
        Uri uri = Uri.fromFile(mOutputFile);

        //呼叫系統的拍照功能
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // 指定呼叫相機拍照後照片的儲存路徑
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        startActivityForResult(intent, CAMERA_REQUEST_CODE);
        dismissPop();
    }
我們需要重寫系統的onActivityResult()方法,用於接收拍照的相片;

在onActivityResult()方法中新增如下程式碼用於接收拍照圖片:

if (requestCode == CAMERA_REQUEST_CODE) {//相簿
            if (resultCode == RESULT_CANCELED) {
                ToastUtils.showToast(context, "拍照取消");
                return;
            }
            if (resultCode != RESULT_OK) {
                ToastUtils.showToast(context, "拍照失敗");
                return;
            }
            //確定接收成功後,開啟系統裁剪圖片頁面
            startCropActivity(Uri.fromFile(mOutputFile));
        }
開啟系統相簿裁剪頁面:
 //啟動相簿裁剪
    private void startCropActivity(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        // crop為true是設定在開啟的intent中設定顯示的view可以剪裁
        intent.putExtra("crop", "true");
        // aspectX aspectY 是寬高的比例
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // outputX,outputY 是剪裁圖片的寬高
        intent.putExtra("outputX", 150);
        intent.putExtra("outputY", 150);
        //MediaStore.EXTRA_OUTPUT關聯到一個Uri,此Uri是用來存放Bitmap
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(mOutputFile.getAbsoluteFile() + "tmp")));
        startActivityForResult(intent, REQUEST_CODE_CLIP_PHOTO);
    }
然後在onActivityResult()方法中新增如下程式碼用於接收裁剪完成的圖片:
if (requestCode == REQUEST_CODE_CLIP_PHOTO) {//裁剪頁面
            if (resultCode == RESULT_CANCELED) {
                ToastUtils.showToast(context, "裁剪取消");
                return;
            }
            if (resultCode != RESULT_OK) {
                ToastUtils.showToast(context, "裁剪失敗");
                return;
            }
            /**
             * 在真實專案中獲取bitmap之後直接傳給後臺
             */
            Bitmap bitmap = BitmapFactory.decodeFile(mOutputFile.getAbsolutePath() + "tmp");
            ivCircle.setImageBitmap(bitmap);
        } 


當點選"手機相簿"時開啟系統相簿選擇頁面:
 //啟動系統相簿
    private void startPhotoActivity() {
        //獲取當前File物件的絕對路徑名的字串形式
        String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath();
        //宣告new file並不會建立檔案或資料夾
        mOutputFile = new File(sdPath, System.currentTimeMillis() + ".tmp");
        Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        intent.setType("image/*");
        startActivityForResult(intent, PHOTE_REQUEST_CODE);
        dismissPop();
    }
然後在onActivityResult()方法中新增如下程式碼用於接收相簿選擇的圖片:
if (requestCode == PHOTE_REQUEST_CODE) {//相簿
            if (resultCode == RESULT_CANCELED) {
                ToastUtils.showToast(context, "取消相簿");
                return;
            }
            if(resultCode!=RESULT_OK){
                ToastUtils.showToast(context,"選擇圖片異常");
                return;
            }

            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };
            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();

            //獲取bitmap;在真實專案中將bitmap傳遞給後臺
            Bitmap bitmap = BitmapFactory.decodeFile(picturePath);
            ivCircle.setImageBitmap(bitmap);
        }
最後提醒大家,記得開啟相應的許可權;

相關推薦

android圓形頭像:相機裁剪+相簿選擇

這裡我們呼叫的都是系統提供的類,所以使用起來非常簡單; 每次點選圓形頭像都會彈出一個PopupWindow,可以點選“拍照”,“手機相簿”和"取消"; 1,當點選"拍照"時開啟系統拍照頁面,拍照完成 成功接收圖片以後 攜帶資料 開啟 圖片裁剪頁面,裁剪完成  成功接收圖片

Android啟動系統相機,開啟相簿選擇圖片

相機 Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //指定拍照後圖片名稱 String photoName = System.currentTimeMillis() + ".jpg"; //設定拍照後圖片存放位置RO

Android圓形頭像(實現相機拍攝+相簿選擇+圖片裁剪功能)

功能實現:點選圓形頭像之後可以實現相簿上傳或者開啟相機,然後把得到的圖片經過剪裁,把剪裁過的圖片設定為頭像的背景圖 步驟:第一步:自定義一個類,繼承ImageView,重寫draw方法,實現外觀為圓形 第二步:在xml檔案中引用該控制元件 第三步:實現圓形頭像的點選事件,點

Android圓形頭像設定(實現相機相簿選擇裁剪)相容6.0/7.0

Android圓形頭像設定(實現相機、相簿選擇並裁剪)相容Android 7.0/6.0 Android7.0新增了許可權修改、目錄被限制訪問、多視窗 等等,最近在做頭像設定的時候,執行到Android7.0的機子上,拍照和進相簿都報錯:FileUriExpo

android圓形頭像相機相簿載入圖片到圓形頭像

這是現在很多軟體裡面很常用的功能; 首先說下佈局:佈局檔案非常簡單,使用的是一個自定義的圓形頭像; 當點選圓形頭像的時候彈出一個popWindow,然後點選拍照,相簿的時候呼叫系統的相機和系統的相簿 佈局檔案:(circleImageView是一個自定義的控制元件整合I

Android 7.0 拍照,相簿選擇和系統圖片裁剪和刪除適配

Android 7.0 引入了 Provider 給 app 申請檔案儲存路徑,所以需要配置 Provider ,才可以使用 儲存功能。 定義 provider 在 res/xml 資料夾下定義

Android 啟動系統相機相簿裁剪圖片及6.0許可權管理

在日常開發中,我們經常需要用到上傳圖片的 功能,這個時候通常有兩種做法,第一種,從相機獲取,第二種,從相簿獲取。今天這篇部落格主要講解利用系統的Intent怎樣獲取? 主要內容如下 - 怎樣通過相機獲取我們的圖片 - 怎樣啟動相簿獲取我們想要的圖片 -

android呼叫系統相機相簿上傳頭像

話說昨天的冰碴下得真心大,騎車回來的路上臉被打的生疼啊!清明小長假第一天,借這個時間把前兩天想記錄的一點內容補充上吧。這篇文章主要記錄呼叫系統相機或者從系統相簿中選取照片然後上傳頭像,這是一個很平常的需求,網上的例子也很多,但是,(注意:前方高能預警!!!)我遇到了一個坑,選

Android WebView 選擇圖片並上傳(呼叫相機拍照/相簿/選擇檔案)

前言: 這個功能其實我才剛接觸。不熟...在這個給大家提供的都是經過本人驗證之後的一些案例。可以在專案中跑的。 最近專案嵌入混合開發,都是使用WebView來跳轉,頁面展示。有用到這個圖片上傳的功能。 原本是一臉懵的,查了很多資料看一些大神都寫的很多程式碼很複雜(原諒我

Android呼叫系統相機相簿裁剪圖片並壓縮上傳(適配7.0)

作者:八怪不姓醜 連結:http://www.jianshu.com/p/e11a34e2ea4f 著作權歸作者所有,本文經作者授權推送。 一、前言 最近在開發中遇到了一個比較棘手的問題 由於在之前使用的版本-targetSdkVersion小於24也就是小於7.

android圓形頭像、圖片

public static Bitmap toRoundImage(Bitmap bitmap) { float roundPx = 0; int rectStartX=0; int rectStartY=0; Bitmap output = Bitmap.crea

Android與H5相機相簿筆記

公司專案中android內嵌H5頁面,H5頁面需要選擇上傳圖片功能。H5的標籤無法調起android照相機和相簿功能,所以只能android進行處理。本人第一次做,借鑑網上諸多的程式碼,總結如下:

Android呼叫系統相機相簿

拍照和相簿的功能在實際開發中是最常見的功能,這裡記錄下。 準備工作 許可權 1234 <!-- 往SDCard寫入資料許可權 --> <uses-permission android:name="android.permission.WRIT

Android 圓形頭像的兩種實現方式

前言 這篇部落格只是為了做一個記錄而已,方便而後查詢,核心程式碼都是直接採用鴻洋部落格裡面的程式碼的。 圓形頭像在實際開發中實際很常見,一般來說,主要有兩種實現方式: 第一種: 使用 Paint 的 Xfermode 實戰 第二種方法: 使用 B

Android圓形頭像的繪製(三)之多人頭像的實現

上篇文章Android圓形影象的繪製(二)介紹了單人圓形頭像的繪製,這篇文章也是圓形頭像的最後一篇。多人頭像存在的場景有很多,像一些社交軟體,只要涉及到群聊的功能,基本上都會存在多人頭像。下面介紹多人頭像是怎樣實現的,最多支援五人。 在進行多人頭像繪製的過程中,Circle

Android呼叫系統相機相簿功能,適配6.0許可權獲取以及7.0以後獲取URI(相容多版本)

  Android中呼叫系統相機來拍攝照片的程式碼,如下:1、首先設定Uri獲取判斷以及相機請求Codepublicfinalint TYPE_TAKE_PHOTO = 1;//Uri獲取型別判斷publicfinalint CODE_TAKE_PHOTO = 1;//相機R

android 拍照,圖片裁剪選擇圖片

照片 1.跳轉到拍照介面 File imageFile = new File(Environment .getExternalStorageDirectory(), "tempImage.

android 跳轉到系統相簿選擇圖片

Intent intent = new Intent(); if (Build.VERSION.SDK_INT < 19) { intent.setAction(Intent.ACTION_GET_CONTENT); intent.setType("i

Android相簿選擇或者直接拍照來設定圓形頭像CircleImageView

實現底部彈出的程式碼如下SelectPickPopupWindow.class,需要整合PopupWindow,程式碼 import android.app.Activity; import android.content.Context; import android.g

Android 頭像上傳 相機+相簿 繪製圓形頭像

老話常談,在開始之前來幾張圖,看看效果: 主介面: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://