【基礎(chǔ)筆記】Android Studio拍照、選擇相冊(cè)(第三方框架)

一砸彬、選擇相冊(cè)(FilePicker)

1、導(dǎo)入依賴

implementation 'cn.imlibo:FilePicker:v0.0.5_alpha'

2斯入、使用方法

①選擇指定后綴文件

FilePicker
                .from(this)
                .chooseForMimeType()//選擇指定后綴文件
                .setMaxCount(10)
                .setFileTypes("png", "doc","apk", "mp3", "gif", "txt", "mp4", "zip")
                .requestCode(REQUEST_CODE_CHOOSE)//確認(rèn)碼
                .start();

②在圖片選擇器中選擇圖片或視頻

FilePicker
                .from(this)
                .chooseMedia()//圖片選擇器
                .enabledCapture(true)
                .setTheme(R.style.FilePicker_Dracula)
                .requestCode(REQUEST_CODE_CHOOSE)
                .start();

③接受返回的文件

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode != RESULT_OK) {
            return;
        }
        if (requestCode == REQUEST_CODE_CHOOSE) {
            ArrayList<EssFile> essFileList = data.getParcelableArrayListExtra(Const.EXTRA_RESULT_SELECTION);
            StringBuilder builder = new StringBuilder();
            for (EssFile file :
                    essFileList) {
                builder.append(file.getMimeType()).append(" | ").append(file.getName()).append("\n\n");
            }
            textView.setText(builder.toString());//顯示選取結(jié)果
           //setViewText(builder.toString(), pathName);通常上傳的時(shí)候需要文件路徑砂碉,新寫一個(gè)方法保存文件路徑
        }
    }

3、Git地址

FilePicker

二刻两、拍照(TakePhoto)

①增蹭、添加依賴

 repositories {
       //glide
        mavenCentral()
        google()
    }
dependencies {
    .....
    implementation 'com.jph.takephoto:takephoto_library:4.0.3'
    //Glide圖片顯示
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}

②、Activity實(shí)現(xiàn)takephoto

/**
 * 實(shí)現(xiàn)Takephoto磅摹,InvokeListener滋迈。重寫多個(gè)方法,添加獲取實(shí)例方法getPhoto户誓,對(duì)圖片進(jìn)行壓縮裁剪等操作饼灿。
 */
public class GetPicture extends AppCompatActivity implements TakePhoto.TakeResultListener, InvokeListener {

    @BindView(R.id.iv_choose)
    ImageView ivChoose;
    @BindView(R.id.btn_photo)
    Button btnPhoto;
    @BindView(R.id.btn_picture)
    Button btnPicture;
    @BindView(R.id.btn_multiple_choice)
    Button btnMultipleChoice;
    @BindView(R.id.iv_choose2)
    ImageView ivChoose2;
    private TakePhoto takePhoto;
    private InvokeParam invokeParam;
    ArrayList<TImage> images;//返回的圖片對(duì)象
    private int flag;//1-->打開相機(jī)(裁剪),2-->打開相冊(cè)(裁剪)帝美,3-->打開相冊(cè)(多選裁剪)

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        getTakePhoto().onCreate(savedInstanceState);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.get_picture);
        ButterKnife.bind(this);
    }


    /**
     * 獲取TakePhoto實(shí)例
     *
     * @return
     */
    public TakePhoto getTakePhoto() {
        if (takePhoto == null) {
            takePhoto = (TakePhoto) TakePhotoInvocationHandler.of(this).bind(new TakePhotoImpl(this, this));
        }
        //設(shè)置壓縮規(guī)則碍彭,最大500kb
        takePhoto.onEnableCompress(new CompressConfig.Builder().setMaxSize(500 * 1024).create(), true);
        return takePhoto;
    }


    /**
     * 拍照,選取照片等操作
     */
    private void takePhotoAndImage() {
        //圖片保存路徑
        File file = new File(getExternalCacheDir(), System.currentTimeMillis() + ".png");
        Uri uri = Uri.fromFile(file);
        //圖片裁剪方式
        int size = Math.min(getResources().getDisplayMetrics().widthPixels, getResources().getDisplayMetrics().heightPixels);
        CropOptions cropOptions = new CropOptions.Builder().setOutputX(size).setOutputX(size).setWithOwnCrop(false).create();
        if (flag == 1) {
            //相機(jī)獲取照片并剪裁
            takePhoto.onPickFromCaptureWithCrop(uri, cropOptions);
            //相機(jī)獲取不剪裁
            //takePhoto.onPickFromCapture(uri);
        } else if (flag == 2) {
            //相冊(cè)獲取照片并剪裁
            takePhoto.onPickFromGalleryWithCrop(uri, cropOptions);
            //相冊(cè)獲取不剪裁
//      takePhoto.onPickFromGallery();
        } else if (flag == 3) {
            //多選,并剪裁
//            takePhoto.onPickMultipleWithCrop(3, cropOptions);
            //多選庇忌,不剪裁
            takePhoto.onPickMultiple(2);
        }
    }

    /**
     * 顯示圖片
     */
    private void showImg() {
        for (int i = 0, j = images.size(); i < j - 1; i += 2) {
            Glide.with(this).load(new File(images.get(i).getCompressPath())).into(ivChoose);
            Glide.with(this).load(new File(images.get(i + 1).getCompressPath())).into(ivChoose2);
        }
        if (images.size() % 2 == 1) {
            Glide.with(this).load(new File(images.get(images.size() - 1).getCompressPath())).into(ivChoose);
        }

    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        getTakePhoto().onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        getTakePhoto().onSaveInstanceState(outState);
        super.onSaveInstanceState(outState, outPersistentState);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        PermissionManager.TPermissionType type = PermissionManager.onRequestPermissionsResult(requestCode, permissions, grantResults);
        PermissionManager.handlePermissionsResult(this, type, invokeParam, this);
    }

    @Override
    public void takeSuccess(TResult result) {
        images = result.getImages();
        showImg();
    }

    @Override
    public void takeFail(TResult result, String msg) {
        Toast.makeText(CallPhone.this,"獲取圖片失敗",Toast.LENGTH_SHORT).show();

    }

    @Override
    public void takeCancel() {
        Toast.makeText(CallPhone.this, "用戶取消操作", Toast.LENGTH_SHORT).show();

    }

    @Override
    public PermissionManager.TPermissionType invoke(InvokeParam invokeParam) {
        PermissionManager.TPermissionType type = PermissionManager.checkPermission(TContextWrap.of(this), invokeParam.getMethod());
        if (PermissionManager.TPermissionType.WAIT.equals(type)) {
            this.invokeParam = invokeParam;
        }
        return type;
    }


    @OnClick({R.id.btn_photo, R.id.btn_picture, R.id.btn_multiple_choice})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_photo:
                flag = 1;
                takePhotoAndImage();
                break;
            case R.id.btn_picture:
                flag = 2;
                takePhotoAndImage();
                break;
            case R.id.btn_multiple_choice:
                flag = 3;
                takePhotoAndImage();
                break;
        }
    }
}

③實(shí)例圖片

選取前
選取時(shí)

選取加載后

④Git地址

TakePhoto

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舞箍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子皆疹,更是在濱河造成了極大的恐慌创译,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件墙基,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡刷喜,警方通過查閱死者的電腦和手機(jī)残制,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掖疮,“玉大人初茶,你說我怎么就攤上這事∽巧粒” “怎么了恼布?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)搁宾。 經(jīng)常有香客問我折汞,道長(zhǎng),這世上最難降的妖魔是什么盖腿? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任爽待,我火速辦了婚禮,結(jié)果婚禮上翩腐,老公的妹妹穿的比我還像新娘鸟款。我一直安慰自己,他們只是感情好茂卦,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布何什。 她就那樣靜靜地躺著,像睡著了一般等龙。 火紅的嫁衣襯著肌膚如雪处渣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天而咆,我揣著相機(jī)與錄音霍比,去河邊找鬼。 笑死暴备,一個(gè)胖子當(dāng)著我的面吹牛悠瞬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼浅妆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼望迎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凌外,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤辩尊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后康辑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摄欲,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年疮薇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胸墙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡按咒,死狀恐怖迟隅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情励七,我是刑警寧澤智袭,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站掠抬,受9級(jí)特大地震影響俗孝,放射性物質(zhì)發(fā)生泄漏镊讼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撩匕。 院中可真熱鬧锦亦,春花似錦宇弛、人聲如沸曙痘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)馏臭。三九已至,卻和暖如春讼稚,著一層夾襖步出監(jiān)牢的瞬間括儒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工锐想, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帮寻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓赠摇,卻偏偏與公主長(zhǎng)得像固逗,于是被迫代替她去往敵國(guó)和親浅蚪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容