Android實用視圖動畫及工具系列之九:漂亮的圖片選取器,高效能防崩潰圖片選擇工具

來源:互聯網
上載者:User

標籤:null   系統   rac   set   article   ade   讀取   string   display   

實現效果

功能說明Andorid-ImagesPickers是一個圖片選擇(單選/多選)、拍照、裁剪的圖片選取器。使用方便,功能可自己配置,Andorid-ImagesPickers自身並沒有強制綁定某個ImageLoader,開發人員可以根據自己項目給Andorid-ImagesPickers配置圖片載入器。

也許有人會問:系統不是有相簿選取器嗎,為什麼還有做一個圖片選取器呢,有必要嗎?我告訴你很有必要。,QQ等等App它們都是自己帶圖片選取器,並沒有直接調系統的圖片選取器。為什麼要這麼做呢?我總結出一下幾點:
· 最大的問題就是相容性了,手機廠商那麼多,相簿軟體那麼多從而引起各種奇葩的問題
· 有些手機拍照圖片倒立情況(如三星和魅族)
· 拿到的bitmap或uri為空白
· 非常頻繁出現OOM
· 不支援多選
· 拍照/選擇圖片/裁剪視乎用起來有些麻煩,加上處理一些旋轉、裁剪、壓縮就更加麻煩了,代碼多得不行不行的。
· 系統的圖片選擇UI上與自己APP樣式不統一
· 有些不支援圖片旋轉
· ....

使用本圖片選取器以上問題你都不用考慮,就是這麼的任性。
如何部署一:通過Gradle抓取
dependencies {}

二:在 AndroidManifest.xml 中 添加 如下許可權
<!-- 從sdcard中讀取資料的許可權 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><!-- 往sdcard中寫入資料的許可權 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

三:建立 圖片載入器 (其中可以按照 喜好 使用不同的 第三方圖片載入架構 以下為Glide樣本)
public class GlideLoader implements com.yancy.imageselector.ImageLoader {   @Override   public void displayImage(Context context, String path, ImageView imageView) {       Glide.with(context)               .load(path)               .placeholder(com.yancy.imageselector.R.mipmap.imageselector_photo)               .centerCrop()               .into(imageView);   }}

四:配置 ImageConfigUI 視圖配置
 ImageConfig imageConfig      = new ImageConfig.Builder(new GlideLoader())     // 如果在 4.4 以上,則修改狀態列顏色 (預設黑色)     .steepToolBarColor(getResources().getColor(R.color.blue))     // 標題的背景顏色 (預設黑色)     .titleBgColor(getResources().getColor(R.color.blue))     // 提交按鈕字型的顏色  (預設白色)     .titleSubmitTextColor(getResources().getColor(R.color.white))     // 標題顏色 (預設白色)     .titleTextColor(getResources().getColor(R.color.white))     .build();
多選
 ImageConfig imageConfig        = new ImageConfig.Builder(new GlideLoader())        .steepToolBarColor(getResources().getColor(R.color.blue))        .titleBgColor(getResources().getColor(R.color.blue))        .titleSubmitTextColor(getResources().getColor(R.color.white))        .titleTextColor(getResources().getColor(R.color.white))        // 開啟多選   (預設為多選)         .mutiSelect()        // 多選時的最大數量   (預設 9 張)        .mutiSelectMaxSize(9)        // 開啟拍照功能 (預設關閉)        .showCamera()        // 已選擇的圖片路徑        .pathList(path)        // 拍照後存放的圖片路徑(預設 /temp/picture) (會自動建立)        .filePath("/ImageSelector/Pictures")        .build();ImageSelector.open(MainActivity.this, imageConfig);   // 開啟圖片選取器
單選
 ImageConfig imageConfig        = new ImageConfig.Builder(new GlideLoader())        .steepToolBarColor(getResources().getColor(R.color.blue))        .titleBgColor(getResources().getColor(R.color.blue))        .titleSubmitTextColor(getResources().getColor(R.color.white))        .titleTextColor(getResources().getColor(R.color.white))        // 開啟單選   (預設為多選)         .singleSelect()        // 開啟拍照功能 (預設關閉)        .showCamera()        // 拍照後存放的圖片路徑(預設 /temp/picture) (會自動建立)        .filePath("/ImageSelector/Pictures")        .build();ImageSelector.open(MainActivity.this, imageConfig);   // 開啟圖片選取器
單選1:1便捷
 ImageConfig imageConfig        = new ImageConfig.Builder(new GlideLoader())        .steepToolBarColor(getResources().getColor(R.color.blue))        .titleBgColor(getResources().getColor(R.color.blue))        .titleSubmitTextColor(getResources().getColor(R.color.white))        .titleTextColor(getResources().getColor(R.color.white))        // (預設配置:關閉    比例 1:1    輸出解析度  500*500)        .crop()          // 開啟單選   (預設為多選)         .singleSelect()        // 開啟拍照功能 (預設關閉)        .showCamera()        // 拍照後存放的圖片路徑(預設 /temp/picture) (會自動建立)        .filePath("/ImageSelector/Pictures")        .build();ImageSelector.open(MainActivity.this, imageConfig);   // 開啟圖片選取器
單選自訂
 ImageConfig imageConfig        = new ImageConfig.Builder(new GlideLoader())        .steepToolBarColor(getResources().getColor(R.color.blue))        .titleBgColor(getResources().getColor(R.color.blue))        .titleSubmitTextColor(getResources().getColor(R.color.white))        .titleTextColor(getResources().getColor(R.color.white))        // (預設配置:關閉    比例 1:1    輸出解析度  500*500)        .crop(1, 2, 500, 1000)         // 開啟單選   (預設為多選)         .singleSelect()        // 開啟拍照功能 (預設關閉)        .showCamera()        // 拍照後存放的圖片路徑(預設 /temp/picture) (會自動建立)        .filePath("/ImageSelector/Pictures")        .build();ImageSelector.open(MainActivity.this, imageConfig);   // 開啟圖片選取器

五:在 onActivityResult 中擷取選中的照片路徑 數組 :
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);  if (requestCode == ImageSelector.IMAGE_REQUEST_CODE && resultCode == RESULT_OK && data != null) {    // Get Image Path List     List<String> pathList = data.getStringArrayListExtra(ImageSelectorActivity.EXTRA_RESULT);     for (String path : pathList) {         Log.i("ImagePathList", path);     }  }}
程式碼範例:
public class MainActivity extends AppCompatActivity {    private Button btn1, btn2;    private TextView tv1;    private ArrayList<String> path = new ArrayList<>();    public static final int REQUEST_CODE = 123;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn1 = (Button) findViewById(R.id.btn1);        btn2 = (Button) findViewById(R.id.btn2);        tv1 = (TextView) findViewById(R.id.tv1);        //單選        btn1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                ImageConfig imageConfig = new ImageConfig.Builder(                        new GlideLoader())                        .steepToolBarColor(getResources().getColor(R.color.titleBlue))                        .titleBgColor(getResources().getColor(R.color.titleBlue))                        .titleSubmitTextColor(getResources().getColor(R.color.white))                        .titleTextColor(getResources().getColor(R.color.white))                        // 開啟單選   (預設為多選)  (單選 為 singleSelect)                        .singleSelect()                        //.crop()                        // 開啟拍照功能 (預設開啟)                        //.showCamera()                        .requestCode(REQUEST_CODE)                        .build();                ImageSelector.open(MainActivity.this, imageConfig);            }        });        //多選        btn2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                ImageConfig imageConfig = new ImageConfig.Builder(                        // GlideLoader 可用自己用的緩衝庫                        new GlideLoader())                        // 如果在 4.4 以上,則修改狀態列顏色 (預設黑色)                        .steepToolBarColor(getResources().getColor(R.color.titleBlue))                        // 標題的背景顏色 (預設黑色)                        .titleBgColor(getResources().getColor(R.color.titleBlue))                        // 提交按鈕字型的顏色  (預設白色)                        .titleSubmitTextColor(getResources().getColor(R.color.white))                        // 標題顏色 (預設白色)                        .titleTextColor(getResources().getColor(R.color.white))                        // 開啟多選   (預設為多選)  (單選 為 singleSelect)                        //.singleSelect()                        //裁剪                        //.crop()                        // 多選時的最大數量   (預設 9 張)                        .mutiSelectMaxSize(9)                        // 已選擇的圖片路徑                        .pathList(path)                        // 拍照後存放的圖片路徑(預設 /temp/picture)                        .filePath("/temp")                        // 開啟拍照功能 (預設開啟)                        .showCamera()                        .requestCode(REQUEST_CODE)                        .build();                ImageSelector.open(MainActivity.this, imageConfig);            }        });    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK && data != null) {            List<String> pathList = data.getStringArrayListExtra(ImageSelectorActivity.EXTRA_RESULT);            tv1.setText("");            for (String path : pathList) {                tv1.append(path);            }            path.clear();            path.addAll(pathList);        }    }}

--------------------------------------------------------------------------------------------------------------------
查看及擷取原始碼: https://github.com/jaikydota/Andorid-ImagesPickers
--------------------------------------------------------------------------------------------------------------------

聲明

歡迎轉載,但請保留文章原始出處
Jaiky_傑哥 
出處:http://blog.csdn.net/jaikydota163/article/details/52098880


Android實用視圖動畫及工具系列之九:漂亮的圖片選取器,高效能防崩潰圖片選擇工具

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.