Android高仿QQピクチャーセレクタ
APPとして、現地の写真を選択する必要がある時、まず考えたのは間違いなくシステムアルバムです。しかし、Androidの携帯電話は多種多様で、携帯電話のピクセルのアップグレード、大図が戻らないなどの異常な因数があります。適合機種は比較的難しいです。微信、QQは相次いで自分のAPPに画像選択機能を集積しました。システムの提供する写真選択器を放棄しました。ここはQQをまねて1つの当地のピクチャーのセレクタをして、PS:前にある人は“まねる”が“防ぐ”と書いたと言って、今日特に注意して、悪くないを求めます。
先に効果図を書きます。真実がないです。
実現の効果は大体こんなものです。
1.単一選択:ローカル画像選択フォルダにジャンプし、フォルダを選択したら、そのフォルダの下のすべての画像に入り、ある画像を選択したら、画像アドレス情報に戻ります。
2.複数選択:画像フォルダにジャンプして、画像を選択し、右上の小さな円をクリックして、この図を選択し、画像の他の領域をクリックして、大図を見て、プレビューをクリックして、選択した画像を確認して、フォルダをまたいで画像を選択することができます。
この効果を達成するためには、いくつかのことをする必要があります。
1.ローカルのすべての画像があるフォルダを読みだします。
ここでContentResolaverでメディアファイルを読みます。
2.指定されたフォルダの下のすべての画像を読み込みます。
あるディレクトリを選択すると、そのディレクトリの下のすべての画像を読み込む必要があります。
3.UIインタラクティブ
まず、すべての画像が含まれているフォルダを展示する際に、画像が入っているフォルダを非同期的にロードし、読み取りに成功したらリストを表示します。ここで使っているRecyclerViewのリスト情報は、あるディレクトリをクリックした時に、変更ディレクトリの下の画像を読み込んで、画像の展示ページで、現在クリックした画像が選択リストの中にあるかどうかを判断します。いいえ、追加します。ここの画像ロードはオープンソースフレームImageLoaderを使っています。
Activityジャンプの場合は、画像リストListを転送するために、listはカスタムエンティティ類であり、intentで送ることを最初に考えましたが、intent転送後は、list.get.containsによって同じオブジェクトかどうかを比較する場合は、常に異なるオブジェクトであることを確認してください。したがって、ここで観察者のクラスを定義して、選択した画像とフォルダの下のすべての画像を保存します。同時に大図を見る時、一枚を選択したら、あるいは取り消して一枚の図を選択したら、観察者の通知で更新すればいいです。
単一選択の場合、必要な場所で呼び出します。
https://github.com/JarekWang/photoselect
以上は小编が皆さんに绍介したAndroid高仿QQピクチャーセレクタの全ての叙述です。
先に効果図を書きます。真実がないです。
実現の効果は大体こんなものです。
1.単一選択:ローカル画像選択フォルダにジャンプし、フォルダを選択したら、そのフォルダの下のすべての画像に入り、ある画像を選択したら、画像アドレス情報に戻ります。
2.複数選択:画像フォルダにジャンプして、画像を選択し、右上の小さな円をクリックして、この図を選択し、画像の他の領域をクリックして、大図を見て、プレビューをクリックして、選択した画像を確認して、フォルダをまたいで画像を選択することができます。
この効果を達成するためには、いくつかのことをする必要があります。
1.ローカルのすべての画像があるフォルダを読みだします。
ここでContentResolaverでメディアファイルを読みます。
String[] columns = {MediaStore.Images.Media._ID, MediaStore.Images.Thumbnails.DATA, MediaStore.Images.Media.DATA, MediaStore.Images.Media.BUCKET_ID,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME, "COUNT(1) AS count"};
String selection = "0==0) GROUP BY (" + MediaStore.Images.Media.BUCKET_ID;
String sortOrder = MediaStore.Images.Media.DATE_MODIFIED;
Cursor cursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, selection, null, sortOrder);
これは簡単なSQLクエリ文です。フォルダによってグループ化され、フォルダの下の画像数に戻ります。2.指定されたフォルダの下のすべての画像を読み込みます。
あるディレクトリを選択すると、そのディレクトリの下のすべての画像を読み込む必要があります。
String[] columns = new String[]{MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA};
/* -- */
String whereclause = MediaStore.Images.ImageColumns.DATA + " like'" + folderPath + "/%'";
Log.i("queryGalleryPicture", "galleryPath:" + folderPath);
Cursor corsor = c.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, whereclause, null, null);
ここの照会文はファイル名によってフィルタリングされています。画像パスにフォルダパスが含まれている限り、そのフォルダの下の画像です。3.UIインタラクティブ
まず、すべての画像が含まれているフォルダを展示する際に、画像が入っているフォルダを非同期的にロードし、読み取りに成功したらリストを表示します。ここで使っているRecyclerViewのリスト情報は、あるディレクトリをクリックした時に、変更ディレクトリの下の画像を読み込んで、画像の展示ページで、現在クリックした画像が選択リストの中にあるかどうかを判断します。いいえ、追加します。ここの画像ロードはオープンソースフレームImageLoaderを使っています。
if (mSelectlist.contains(imageBean)) { // item ,
mSelectlist.remove(imageBean);
subSelectPosition();
} else { // ,
if (mSelectlist.size() >= maxCount) {
Toast.makeText(mContext, mContext.getResources().getString(R.string.publish_select_photo_max, maxCount), Toast.LENGTH_SHORT).show();
return;
}
mSelectlist.add(imageBean);
imageBean.selectPosition = mSelectlist.size();
}
//
notifyItemChanged(position);
一枚の写真が削除されませんでした。画像の番号は対応して変更されました。その後、変更項目の更新UIを通知します。Activityジャンプの場合は、画像リストListを転送するために、listはカスタムエンティティ類であり、intentで送ることを最初に考えましたが、intent転送後は、list.get.containsによって同じオブジェクトかどうかを比較する場合は、常に異なるオブジェクトであることを確認してください。したがって、ここで観察者のクラスを定義して、選択した画像とフォルダの下のすべての画像を保存します。同時に大図を見る時、一枚を選択したら、あるいは取り消して一枚の図を選択したら、観察者の通知で更新すればいいです。
/**
*
*/
public void updateImageSelectChanged () {
setChanged();
notifyObservers(imgSelectObj);
}
はい、以上があれば、私達の写真選択器を使うことができます。単一選択の場合、必要な場所で呼び出します。
/* , context, */
FolderListActivity.startSelectSingleImgActivity(this, 2);
:
/* context, code, List, */
FolderListActivity.startFolderListActivity(this, 1, null, 9);
最後のActivityのonActivityResoultで返信されたピクチャデータを受信します。
List<ImageFolderBean> list = (List<ImageFolderBean>) data.getSerializableExtra("list");
ソースのダウンロード先:https://github.com/JarekWang/photoselect
以上は小编が皆さんに绍介したAndroid高仿QQピクチャーセレクタの全ての叙述です。