標籤: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實用視圖動畫及工具系列之九:漂亮的圖片選取器,高效能防崩潰圖片選擇工具