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

首頁 > 系統 > Android > 正文

Android自定義圖片選擇器

2019-11-09 17:48:48
字體:
來源:轉載
供稿:網友

1.前言

隨著APP功能的全面化,越來越多的應用都開發了類似微信朋友圈的功能,隨時隨地分享自己的心情,圖片視頻!當需要上傳圖片、視頻的時候,就需要一個圖片、視頻資源選擇器,所以接下來將自己實現一個簡單的圖片選擇器。

2.實現思路

①通過contentResolver獲取手機中的圖片、視頻文件,也可以直接拍攝,這個時候不會重新獲取手機里的資源(既然把拍的都刪除了,還查詢出來干嘛)。

②定義一個全局集合,用來存放選中的圖片和視頻,并用一個變量來表示是視頻還是圖片。

③將查詢出來的圖片全部顯示的時候,需要防止內存溢出,這是用來一個網上的優化工具類,挺好用的。

④當選擇好圖片的時候,只需要在Activity顯示出選擇的集合就可以了。

⑤自定義ImageView實現圖片放大縮小,以及解決與Viewpager的滑動沖突

3.效果圖

詳細的功能實現看下面的效果圖片,本來想上傳gif圖的,但是限制只能上傳2M,所以上傳不了,這里就截圖表示一下,具體的實現效果gif圖和源代碼將在git中展示。

4.功能代碼

①contentResolver獲取手機資源代碼。

 /**

     * 獲取手機中的所有圖片

     */

    public ArrayList<SelectFileBean> getAllImage() {

        if (imagelist !=null)

            return imagelist;

        imagelist = new ArrayList<>();

        String[] PRoject = new String[]{MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA};

        Cursor query = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, project,null,null,null);

        if (query.moveToFirst()) {

            int dataColumn = query.getColumnIndex(MediaStore.Images.Media.DATA);

            do {

                SelectFileBean bean = new SelectFileBean();

                bean.setFile_path(query.getString(dataColumn));

                bean.setImage(true);

                imagelist.add(bean);

            } while (query.moveToNext());

        }

        return imagelist;

    }

    /**

     * 獲取手機中所有的視頻

     *

     * @return

     */

    public ArrayList<SelectFileBean> getAllVedio() {

        if (videolist !=null)

            return videolist;

        videolist = new ArrayList<>();

        String[] project = new String[]{MediaStore.Video.Media._ID, MediaStore.Video.Media.DATA};

        Cursor cs = cr.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, project,null,null,null);

        if (cs.moveToFirst()) {

            int dataColum = cs.getColumnIndex(MediaStore.Video.Media.DATA);

            do {

                SelectFileBean bean = new SelectFileBean();

                bean.setFile_path(cs.getString(dataColum));

                bean.setImage(false);

                videolist.add(bean);

            } while (cs.moveToNext());

        }

        return videolist;

    }

②在圖片預覽界面,自定義RelativeLayout,是圖片顯示正方形

@Override

    protectedvoid onMeasure(int widthMeasureSpec,int heightMeasureSpec) {

        //設置自己測量的結果

        setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), getDefaultSize(0, heightMeasureSpec));

        //測量子view

        int measuredWidth = getMeasuredWidth();

        widthMeasureSpec = MeasureSpec.makeMeasureSpec(measuredWidth, MeasureSpec.EXACTLY);

        heightMeasureSpec = widthMeasureSpec;

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    }

③將指定路徑的圖片轉換成bitmap

    /**

     * 將文件路徑的圖片轉換成bitmap

     *

     * @param path

     * @return

     * @throws IOException

     */

    publicstatic Bitmap revitionImageSize(String path)throws IOException {

        if (path ==null) {

            returnnull;

        }

        BufferedInputStream in = new BufferedInputStream(new FileInputStream(

                new File(path)));

        BitmapFactory.Options options = new BitmapFactory.Options();

        options.inJustDecodeBounds = true;

        BitmapFactory.decodeStream(in, null, options);

        in.close();

        int i =0;

        Bitmap bitmap = null;

        while (true) {

            if ((options.outWidth >> i <=1000)

                    && (options.outHeight >> i <= 1000)) {

                in = new BufferedInputStream(

                        new FileInputStream(new File(path)));

                options.inSampleSize = (int) Math.pow(2.0D, i);

                options.inJustDecodeBounds = false;

                bitmap = BitmapFactory.decodeStream(in, null, options);

                break;

            }

            i += 1;

        }

        return bitmap;

    }

④自定義ImageView實現放大縮小,以及解決滑動沖突的代碼由于比較多,這里就不貼出來,可以移步到github中查看5.項目源碼:github地址
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邵东县| 舞阳县| 乌拉特前旗| 深泽县| 宁明县| 五河县| 新巴尔虎右旗| 宽甸| 彭山县| 新宁县| 鹤峰县| 成安县| 昆山市| 庐江县| 饶阳县| 斗六市| 海原县| 民乐县| 万载县| 保靖县| 崇义县| 河曲县| 阿克陶县| 苍山县| 丰原市| 凤凰县| 白朗县| 和田县| 堆龙德庆县| 济源市| 苍溪县| 长寿区| 雅江县| 永德县| 铜梁县| 玉溪市| 吉隆县| 黄大仙区| 商都县| 府谷县| 宿松县|