Commit 23cbe5defb989cace463b2b26710bdf4166bebda
1 parent
be88f8c1
处理展示效率问题
Showing
13 changed files
with
378 additions
and
57 deletions
app/src/main/java/com/cnlive/strike/debug/MainActivity.java
| @@ -66,7 +66,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe | @@ -66,7 +66,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe | ||
| 66 | case R.id.tv_media: | 66 | case R.id.tv_media: |
| 67 | //打开相册 | 67 | //打开相册 |
| 68 | new ImagePicker.Builder() | 68 | new ImagePicker.Builder() |
| 69 | - .maxNum(1) | 69 | + .maxNum(9) |
| 70 | .setSelectGif(true) | 70 | .setSelectGif(true) |
| 71 | .maxImageSize(25 * 1024 * 1024) | 71 | .maxImageSize(25 * 1024 * 1024) |
| 72 | .maxVideoSize(100*1024*1024) | 72 | .maxVideoSize(100*1024*1024) |
lib_media/src/main/java/com/cnlive/media/PickerConfig.java
| @@ -48,7 +48,7 @@ public class PickerConfig { | @@ -48,7 +48,7 @@ public class PickerConfig { | ||
| 48 | //视频选一个 图片选九个 | 48 | //视频选一个 图片选九个 |
| 49 | public static final int PICKER_ONE_VIDEO_TYPE = 103; | 49 | public static final int PICKER_ONE_VIDEO_TYPE = 103; |
| 50 | //展示图片的列数行数 | 50 | //展示图片的列数行数 |
| 51 | - public static int GridSpanCount = 3; | 51 | + public static int GridSpanCount = 4; |
| 52 | public static int GridSpace = 4; | 52 | public static int GridSpace = 4; |
| 53 | 53 | ||
| 54 | //裁剪请求码 | 54 | //裁剪请求码 |
lib_media/src/main/java/com/cnlive/media/frame/view/MediaPickerFragmentView.java
| @@ -2,6 +2,7 @@ package com.cnlive.media.frame.view; | @@ -2,6 +2,7 @@ package com.cnlive.media.frame.view; | ||
| 2 | 2 | ||
| 3 | import android.os.Build; | 3 | import android.os.Build; |
| 4 | import android.text.TextUtils; | 4 | import android.text.TextUtils; |
| 5 | +import android.util.Log; | ||
| 5 | 6 | ||
| 6 | import androidx.annotation.RequiresApi; | 7 | import androidx.annotation.RequiresApi; |
| 7 | import androidx.recyclerview.widget.GridLayoutManager; | 8 | import androidx.recyclerview.widget.GridLayoutManager; |
| @@ -61,18 +62,20 @@ public class MediaPickerFragmentView implements MvpView { | @@ -61,18 +62,20 @@ public class MediaPickerFragmentView implements MvpView { | ||
| 61 | //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能 | 62 | //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能 |
| 62 | mFragment.binding.rv.setHasFixedSize(true); | 63 | mFragment.binding.rv.setHasFixedSize(true); |
| 63 | 64 | ||
| 64 | - mFragment.binding.rv.addOnScrollListener(new RecyclerView.OnScrollListener() { | ||
| 65 | - @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1) | ||
| 66 | - @Override | ||
| 67 | - public void onScrollStateChanged(RecyclerView recyclerView, int newState) { | ||
| 68 | - super.onScrollStateChanged(recyclerView, newState); | ||
| 69 | - if (RecyclerView.SCROLL_STATE_IDLE == newState) { | ||
| 70 | - Glide.with(recyclerView).resumeRequests(); | ||
| 71 | - } else { | ||
| 72 | - Glide.with(recyclerView).pauseRequests(); | ||
| 73 | - } | ||
| 74 | - } | ||
| 75 | - }); | 65 | +// mFragment.binding.rv.addOnScrollListener(new RecyclerView.OnScrollListener() { |
| 66 | +// @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1) | ||
| 67 | +// @Override | ||
| 68 | +// public void onScrollStateChanged(RecyclerView recyclerView, int newState) { | ||
| 69 | +// super.onScrollStateChanged(recyclerView, newState); | ||
| 70 | +// if (RecyclerView.SCROLL_STATE_IDLE == newState) { | ||
| 71 | +// Glide.with(recyclerView).resumeRequests(); | ||
| 72 | +// Log.e("",""); | ||
| 73 | +// } else { | ||
| 74 | +// Log.e("",""); | ||
| 75 | +// Glide.with(recyclerView).pauseRequests(); | ||
| 76 | +// } | ||
| 77 | +// } | ||
| 78 | +// }); | ||
| 76 | mFragment.mMediaAdapter = new MediaAdapter(mFragment.getActivity(), mActivity.showTime, mActivity.mOptions); | 79 | mFragment.mMediaAdapter = new MediaAdapter(mFragment.getActivity(), mActivity.showTime, mActivity.mOptions); |
| 77 | mFragment.binding.rv.setAdapter(mFragment.mMediaAdapter); | 80 | mFragment.binding.rv.setAdapter(mFragment.mMediaAdapter); |
| 78 | 81 |
lib_media/src/main/java/com/cnlive/media/media/entity/Media.java
| @@ -29,6 +29,7 @@ public class Media implements Parcelable { | @@ -29,6 +29,7 @@ public class Media implements Parcelable { | ||
| 29 | // | 29 | // |
| 30 | public boolean isReturnUri; | 30 | public boolean isReturnUri; |
| 31 | public String fileUri; | 31 | public String fileUri; |
| 32 | + public String thumbnails; | ||
| 32 | 33 | ||
| 33 | //是否选中 | 34 | //是否选中 |
| 34 | public boolean isSelect; | 35 | public boolean isSelect; |
lib_media/src/main/java/com/cnlive/media/media/loader/ImageLoader.java
| @@ -128,7 +128,8 @@ public class ImageLoader extends LoaderM implements LoaderManager.LoaderCallback | @@ -128,7 +128,8 @@ public class ImageLoader extends LoaderM implements LoaderManager.LoaderCallback | ||
| 128 | media.setImgHeight(height); | 128 | media.setImgHeight(height); |
| 129 | media.setLongImg(MediaUtils.isLongImg(media)); | 129 | media.setLongImg(MediaUtils.isLongImg(media)); |
| 130 | allFolder.addMedias(media); | 130 | allFolder.addMedias(media); |
| 131 | - | 131 | +// String thumbnails = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA)); |
| 132 | +// media.thumbnails=thumbnails; | ||
| 132 | int index = hasDir(folders, dirName); | 133 | int index = hasDir(folders, dirName); |
| 133 | if (index != -1) { | 134 | if (index != -1) { |
| 134 | folders.get(index).addMedias(media); | 135 | folders.get(index).addMedias(media); |
lib_media/src/main/java/com/cnlive/media/media/loader/MediaLoader.java
| 1 | package com.cnlive.media.media.loader; | 1 | package com.cnlive.media.media.loader; |
| 2 | 2 | ||
| 3 | import android.app.LoaderManager; | 3 | import android.app.LoaderManager; |
| 4 | +import android.content.ContentResolver; | ||
| 4 | import android.content.Context; | 5 | import android.content.Context; |
| 5 | import android.content.CursorLoader; | 6 | import android.content.CursorLoader; |
| 6 | import android.content.Loader; | 7 | import android.content.Loader; |
| 7 | import android.database.Cursor; | 8 | import android.database.Cursor; |
| 9 | +import android.graphics.Bitmap; | ||
| 8 | import android.net.Uri; | 10 | import android.net.Uri; |
| 9 | import android.os.Bundle; | 11 | import android.os.Bundle; |
| 10 | import android.provider.MediaStore; | 12 | import android.provider.MediaStore; |
| 11 | import android.text.TextUtils; | 13 | import android.text.TextUtils; |
| 14 | +import android.util.Log; | ||
| 15 | +import android.util.Size; | ||
| 12 | 16 | ||
| 13 | import com.cnlive.media.media.DataCallback; | 17 | import com.cnlive.media.media.DataCallback; |
| 14 | import com.cnlive.media.media.entity.Folder; | 18 | import com.cnlive.media.media.entity.Folder; |
| 15 | import com.cnlive.media.media.entity.Media; | 19 | import com.cnlive.media.media.entity.Media; |
| 20 | +import com.cnlive.media.utils.AndroidQUtil; | ||
| 16 | import com.cnlive.media.utils.MediaUtils; | 21 | import com.cnlive.media.utils.MediaUtils; |
| 17 | import com.cnlive.media.R; | 22 | import com.cnlive.media.R; |
| 18 | 23 | ||
| @@ -71,7 +76,9 @@ public class MediaLoader extends LoaderM implements LoaderManager.LoaderCallback | @@ -71,7 +76,9 @@ public class MediaLoader extends LoaderM implements LoaderManager.LoaderCallback | ||
| 71 | + MediaStore.Files.FileColumns.MEDIA_TYPE + "=" | 76 | + MediaStore.Files.FileColumns.MEDIA_TYPE + "=" |
| 72 | + MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO; | 77 | + MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO; |
| 73 | 78 | ||
| 79 | + | ||
| 74 | Uri queryUri = MediaStore.Files.getContentUri("external"); | 80 | Uri queryUri = MediaStore.Files.getContentUri("external"); |
| 81 | + | ||
| 75 | CursorLoader cursorLoader = new CursorLoader( | 82 | CursorLoader cursorLoader = new CursorLoader( |
| 76 | mContext, | 83 | mContext, |
| 77 | queryUri, | 84 | queryUri, |
| @@ -90,6 +97,7 @@ public class MediaLoader extends LoaderM implements LoaderManager.LoaderCallback | @@ -90,6 +97,7 @@ public class MediaLoader extends LoaderM implements LoaderManager.LoaderCallback | ||
| 90 | mLoader.onData(folders); | 97 | mLoader.onData(folders); |
| 91 | return; | 98 | return; |
| 92 | } | 99 | } |
| 100 | + | ||
| 93 | Folder allFolder = new Folder(mContext.getResources().getString(R.string.all_dir_name)); | 101 | Folder allFolder = new Folder(mContext.getResources().getString(R.string.all_dir_name)); |
| 94 | folders.add(allFolder); | 102 | folders.add(allFolder); |
| 95 | Folder allVideoDir = new Folder(mContext.getResources().getString(R.string.video_dir_name)); | 103 | Folder allVideoDir = new Folder(mContext.getResources().getString(R.string.video_dir_name)); |
| @@ -131,6 +139,12 @@ public class MediaLoader extends LoaderM implements LoaderManager.LoaderCallback | @@ -131,6 +139,12 @@ public class MediaLoader extends LoaderM implements LoaderManager.LoaderCallback | ||
| 131 | allFolder.addMedias(media); | 139 | allFolder.addMedias(media); |
| 132 | if (mediaType == 3) { | 140 | if (mediaType == 3) { |
| 133 | allVideoDir.addMedias(media); | 141 | allVideoDir.addMedias(media); |
| 142 | +// String thumbnails = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Thumbnails.DATA)); | ||
| 143 | +// ContentResolver contentResolver = mContext.getContentResolver(); | ||
| 144 | +// media.thumbnails = thumbnails; | ||
| 145 | + } else if (mediaType == 1) { | ||
| 146 | +// String thumbnails = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA)); | ||
| 147 | +// media.thumbnails = thumbnails; | ||
| 134 | } | 148 | } |
| 135 | 149 | ||
| 136 | int index = hasDir(folders, dirName); | 150 | int index = hasDir(folders, dirName); |
lib_media/src/main/java/com/cnlive/media/media/loader/VideoLoader.java
| @@ -87,7 +87,6 @@ public class VideoLoader extends LoaderM implements LoaderManager.LoaderCallback | @@ -87,7 +87,6 @@ public class VideoLoader extends LoaderM implements LoaderManager.LoaderCallback | ||
| 87 | Folder allFolder = new Folder(mContext.getResources().getString(R.string.all_video)); | 87 | Folder allFolder = new Folder(mContext.getResources().getString(R.string.all_video)); |
| 88 | folders.add(allFolder); | 88 | folders.add(allFolder); |
| 89 | Cursor cursor = (Cursor) o; | 89 | Cursor cursor = (Cursor) o; |
| 90 | - Log.e("dmc", cursor.getCount() + "数量数量"); | ||
| 91 | while (cursor.moveToNext()) { | 90 | while (cursor.moveToNext()) { |
| 92 | //获取的视频路径 | 91 | //获取的视频路径 |
| 93 | String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA)); | 92 | String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA)); |
| @@ -112,6 +111,8 @@ public class VideoLoader extends LoaderM implements LoaderManager.LoaderCallback | @@ -112,6 +111,8 @@ public class VideoLoader extends LoaderM implements LoaderManager.LoaderCallback | ||
| 112 | String dirName = getParent(path); | 111 | String dirName = getParent(path); |
| 113 | if (TextUtils.isEmpty(dirName)) continue; | 112 | if (TextUtils.isEmpty(dirName)) continue; |
| 114 | Media media = new Media(path, name, dateTime, mediaType, size, id, dirName, duration, fileUri); | 113 | Media media = new Media(path, name, dateTime, mediaType, size, id, dirName, duration, fileUri); |
| 114 | +// String thumbnails = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Thumbnails.DATA)); | ||
| 115 | +// media.thumbnails=thumbnails; | ||
| 115 | allFolder.addMedias(media); | 116 | allFolder.addMedias(media); |
| 116 | 117 | ||
| 117 | int index = hasDir(folders, dirName); | 118 | int index = hasDir(folders, dirName); |
lib_media/src/main/java/com/cnlive/media/ui/activity/MediaActivity.java
| @@ -28,6 +28,7 @@ import com.cnlive.media.model.ImagePickerOptions; | @@ -28,6 +28,7 @@ import com.cnlive.media.model.ImagePickerOptions; | ||
| 28 | import com.cnlive.media.ui.adapter.FolderAdapter; | 28 | import com.cnlive.media.ui.adapter.FolderAdapter; |
| 29 | import com.cnlive.media.ui.fragment.MediaPickerFragment; | 29 | import com.cnlive.media.ui.fragment.MediaPickerFragment; |
| 30 | import com.cnlive.media.ui.fragment.MediaPreviewFragment; | 30 | import com.cnlive.media.ui.fragment.MediaPreviewFragment; |
| 31 | +import com.cnlive.media.utils.ThumbnailsUtils; | ||
| 31 | import com.cnlive.media.utils.observable.MediaAddObservable; | 32 | import com.cnlive.media.utils.observable.MediaAddObservable; |
| 32 | import com.cnlive.media.utils.observable.MediaOpenActivityObservable; | 33 | import com.cnlive.media.utils.observable.MediaOpenActivityObservable; |
| 33 | import com.cnlive.media.utils.observable.MediaOpenInfo; | 34 | import com.cnlive.media.utils.observable.MediaOpenInfo; |
| @@ -140,11 +141,11 @@ public class MediaActivity extends MvpBindingActivity<MediaView, MediaPresenter, | @@ -140,11 +141,11 @@ public class MediaActivity extends MvpBindingActivity<MediaView, MediaPresenter, | ||
| 140 | protected void onCreate(Bundle savedInstanceState) { | 141 | protected void onCreate(Bundle savedInstanceState) { |
| 141 | super.onCreate(savedInstanceState); | 142 | super.onCreate(savedInstanceState); |
| 142 | //初始化携带数据 | 143 | //初始化携带数据 |
| 144 | + | ||
| 143 | if (getPresenter() != null) getPresenter().initIntentData(this); | 145 | if (getPresenter() != null) getPresenter().initIntentData(this); |
| 144 | if (getMvpView() != null) getMvpView().initView(); | 146 | if (getMvpView() != null) getMvpView().initView(); |
| 145 | getSupportFragmentManager().beginTransaction().add(R.id.frame, MediaPickerFragment.newInstanse(), MEDIA_HOME).addToBackStack("").commit(); | 147 | getSupportFragmentManager().beginTransaction().add(R.id.frame, MediaPickerFragment.newInstanse(), MEDIA_HOME).addToBackStack("").commit(); |
| 146 | getMediaData(); | 148 | getMediaData(); |
| 147 | - | ||
| 148 | } | 149 | } |
| 149 | 150 | ||
| 150 | void getMediaData() { | 151 | void getMediaData() { |
| @@ -152,6 +153,7 @@ public class MediaActivity extends MvpBindingActivity<MediaView, MediaPresenter, | @@ -152,6 +153,7 @@ public class MediaActivity extends MvpBindingActivity<MediaView, MediaPresenter, | ||
| 152 | .checkPermissions(this, permissionsRead, REQUEST_CODE_PERMISSION_READ, getResources().getString(R.string.dialog_imagepicker_permission_sdcard_nerver_ask_message), true); | 153 | .checkPermissions(this, permissionsRead, REQUEST_CODE_PERMISSION_READ, getResources().getString(R.string.dialog_imagepicker_permission_sdcard_nerver_ask_message), true); |
| 153 | if (hasPermissions) { | 154 | if (hasPermissions) { |
| 154 | if (needCrop && singlePick) { | 155 | if (needCrop && singlePick) { |
| 156 | +// ThumbnailsUtils.getThumbnails(this); | ||
| 155 | selectMode = PickerConfig.PICKER_IMAGE; | 157 | selectMode = PickerConfig.PICKER_IMAGE; |
| 156 | } | 158 | } |
| 157 | int type = selectMode; | 159 | int type = selectMode; |
lib_media/src/main/java/com/cnlive/media/ui/adapter/MediaAdapter.java
| 1 | package com.cnlive.media.ui.adapter; | 1 | package com.cnlive.media.ui.adapter; |
| 2 | 2 | ||
| 3 | +import android.content.ContentResolver; | ||
| 3 | import android.content.Context; | 4 | import android.content.Context; |
| 4 | import android.view.LayoutInflater; | 5 | import android.view.LayoutInflater; |
| 5 | import android.view.View; | 6 | import android.view.View; |
| @@ -118,6 +119,9 @@ public class MediaAdapter extends BaseRecyclerViewAdapter<Media> { | @@ -118,6 +119,9 @@ public class MediaAdapter extends BaseRecyclerViewAdapter<Media> { | ||
| 118 | private void showMedia(MediaViewHolder mediaViewHolder, int position) { | 119 | private void showMedia(MediaViewHolder mediaViewHolder, int position) { |
| 119 | Media mMedia = getItem(position); | 120 | Media mMedia = getItem(position); |
| 120 | binding = (MediaImageItemBinding) mediaViewHolder.getBinding(); | 121 | binding = (MediaImageItemBinding) mediaViewHolder.getBinding(); |
| 122 | + | ||
| 123 | +// ContentResolver resolver = mContxt.getContentResolver(); | ||
| 124 | +// resolver.loadThumbnail() | ||
| 121 | GlideCacheUtil.intoItemImageThumbnail(mContext, mMedia, binding.mediaImage, null); | 125 | GlideCacheUtil.intoItemImageThumbnail(mContext, mMedia, binding.mediaImage, null); |
| 122 | if (mMedia.mediaType == 1) { | 126 | if (mMedia.mediaType == 1) { |
| 123 | binding.videoInfo.setVisibility(View.GONE); | 127 | binding.videoInfo.setVisibility(View.GONE); |
lib_media/src/main/java/com/cnlive/media/ui/adapter/PreviewBottomAdapter.java
| @@ -52,7 +52,7 @@ public class PreviewBottomAdapter extends RecyclerView.Adapter<PreviewBottomAdap | @@ -52,7 +52,7 @@ public class PreviewBottomAdapter extends RecyclerView.Adapter<PreviewBottomAdap | ||
| 52 | @Override | 52 | @Override |
| 53 | public void onBindViewHolder(final ViewHolder holder, final int position) { | 53 | public void onBindViewHolder(final ViewHolder holder, final int position) { |
| 54 | //填充图片 | 54 | //填充图片 |
| 55 | - GlideCacheUtil.intoItemImage(context, mItems.get(position), holder.rv_item_image, null); | 55 | + GlideCacheUtil.intoItemImageThumbnail(context, mItems.get(position), holder.rv_item_image, null); |
| 56 | 56 | ||
| 57 | if (selectedPosition == position) { | 57 | if (selectedPosition == position) { |
| 58 | holder.rv_item_image.setBackgroundResource(R.drawable.shape_green_square_bg); | 58 | holder.rv_item_image.setBackgroundResource(R.drawable.shape_green_square_bg); |
lib_media/src/main/java/com/cnlive/media/ui/adapter/PreviewBottomMediaAdapter.java
| @@ -53,7 +53,7 @@ public class PreviewBottomMediaAdapter extends BaseRecyclerViewAdapter<Media> { | @@ -53,7 +53,7 @@ public class PreviewBottomMediaAdapter extends BaseRecyclerViewAdapter<Media> { | ||
| 53 | public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { | 53 | public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { |
| 54 | MediaViewHolder mediaViewHolder = (MediaViewHolder) holder; | 54 | MediaViewHolder mediaViewHolder = (MediaViewHolder) holder; |
| 55 | MediaPreviewBottomBarItemBinding bottomBarItemBinding = (MediaPreviewBottomBarItemBinding) mediaViewHolder.getBinding(); | 55 | MediaPreviewBottomBarItemBinding bottomBarItemBinding = (MediaPreviewBottomBarItemBinding) mediaViewHolder.getBinding(); |
| 56 | - GlideCacheUtil.intoItemImage(context, getItem(position), bottomBarItemBinding.bottomItemImageView, null); | 56 | + GlideCacheUtil.intoItemImageThumbnail(context, getItem(position), bottomBarItemBinding.bottomItemImageView, null); |
| 57 | if (isPre) { | 57 | if (isPre) { |
| 58 | if (selectedPosition == position) { | 58 | if (selectedPosition == position) { |
| 59 | bottomBarItemBinding.bottomItemImageView.setBackgroundResource(R.drawable.shape_green_square_bg); | 59 | bottomBarItemBinding.bottomItemImageView.setBackgroundResource(R.drawable.shape_green_square_bg); |
lib_media/src/main/java/com/cnlive/media/utils/GlideCacheUtil.java
| 1 | package com.cnlive.media.utils; | 1 | package com.cnlive.media.utils; |
| 2 | 2 | ||
| 3 | import android.annotation.SuppressLint; | 3 | import android.annotation.SuppressLint; |
| 4 | +import android.content.ContentResolver; | ||
| 4 | import android.content.Context; | 5 | import android.content.Context; |
| 6 | +import android.database.Cursor; | ||
| 5 | import android.graphics.Bitmap; | 7 | import android.graphics.Bitmap; |
| 8 | +import android.graphics.BitmapFactory; | ||
| 6 | import android.net.Uri; | 9 | import android.net.Uri; |
| 10 | +import android.os.Build; | ||
| 7 | import android.os.Looper; | 11 | import android.os.Looper; |
| 12 | +import android.provider.MediaStore; | ||
| 8 | import android.text.TextUtils; | 13 | import android.text.TextUtils; |
| 9 | import android.util.Log; | 14 | import android.util.Log; |
| 15 | +import android.util.Size; | ||
| 10 | import android.view.View; | 16 | import android.view.View; |
| 11 | import android.widget.ImageView; | 17 | import android.widget.ImageView; |
| 12 | import android.widget.ProgressBar; | 18 | import android.widget.ProgressBar; |
| 13 | 19 | ||
| 14 | import androidx.annotation.Nullable; | 20 | import androidx.annotation.Nullable; |
| 21 | +import androidx.annotation.RequiresApi; | ||
| 15 | 22 | ||
| 16 | import com.bumptech.glide.Glide; | 23 | import com.bumptech.glide.Glide; |
| 17 | import com.bumptech.glide.RequestBuilder; | 24 | import com.bumptech.glide.RequestBuilder; |
| @@ -30,6 +37,14 @@ import com.cnlive.media.R; | @@ -30,6 +37,14 @@ import com.cnlive.media.R; | ||
| 30 | import java.io.File; | 37 | import java.io.File; |
| 31 | import java.math.BigDecimal; | 38 | import java.math.BigDecimal; |
| 32 | 39 | ||
| 40 | +import io.reactivex.Observable; | ||
| 41 | +import io.reactivex.ObservableEmitter; | ||
| 42 | +import io.reactivex.ObservableOnSubscribe; | ||
| 43 | +import io.reactivex.Observer; | ||
| 44 | +import io.reactivex.android.schedulers.AndroidSchedulers; | ||
| 45 | +import io.reactivex.disposables.Disposable; | ||
| 46 | +import io.reactivex.schedulers.Schedulers; | ||
| 47 | + | ||
| 33 | /** | 48 | /** |
| 34 | * Created by Lynn on 2018/1/19. | 49 | * Created by Lynn on 2018/1/19. |
| 35 | */ | 50 | */ |
| @@ -216,7 +231,7 @@ public class GlideCacheUtil { | @@ -216,7 +231,7 @@ public class GlideCacheUtil { | ||
| 216 | if (media.mediaType == 1) { | 231 | if (media.mediaType == 1) { |
| 217 | option = option | 232 | option = option |
| 218 | .error(R.drawable.iv_imgload_full_err); | 233 | .error(R.drawable.iv_imgload_full_err); |
| 219 | - }else if (media.mediaType == 1){ | 234 | + } else if (media.mediaType == 1) { |
| 220 | option = option | 235 | option = option |
| 221 | .error(R.drawable.iv_imgload_full_err); | 236 | .error(R.drawable.iv_imgload_full_err); |
| 222 | view.setScaleType(ImageView.ScaleType.CENTER_CROP); | 237 | view.setScaleType(ImageView.ScaleType.CENTER_CROP); |
| @@ -250,9 +265,8 @@ public class GlideCacheUtil { | @@ -250,9 +265,8 @@ public class GlideCacheUtil { | ||
| 250 | } | 265 | } |
| 251 | 266 | ||
| 252 | 267 | ||
| 253 | - | ||
| 254 | @SuppressLint("CheckResult") | 268 | @SuppressLint("CheckResult") |
| 255 | - public static void intoItemImageListener(Context context, Media media, ImageView view, RequestListener listener) { | 269 | + public static void intoItemImageListener(Context context, Media media, ImageView view, RequestListener listener) { |
| 256 | if (context == null || media == null || view == null) return; | 270 | if (context == null || media == null || view == null) return; |
| 257 | 271 | ||
| 258 | RequestOptions option = new RequestOptions(); | 272 | RequestOptions option = new RequestOptions(); |
| @@ -275,7 +289,7 @@ public class GlideCacheUtil { | @@ -275,7 +289,7 @@ public class GlideCacheUtil { | ||
| 275 | option = option | 289 | option = option |
| 276 | .error(R.drawable.iv_imgload_full_err); | 290 | .error(R.drawable.iv_imgload_full_err); |
| 277 | view.setScaleType(ImageView.ScaleType.CENTER_CROP); | 291 | view.setScaleType(ImageView.ScaleType.CENTER_CROP); |
| 278 | - }else if (media.mediaType == 3){ | 292 | + } else if (media.mediaType == 3) { |
| 279 | option = option | 293 | option = option |
| 280 | .error(R.drawable.iv_imgload_full_err); | 294 | .error(R.drawable.iv_imgload_full_err); |
| 281 | 295 | ||
| @@ -287,68 +301,302 @@ public class GlideCacheUtil { | @@ -287,68 +301,302 @@ public class GlideCacheUtil { | ||
| 287 | rb = rb == null ? rm.load(media.path) : rb.load(media.path); | 301 | rb = rb == null ? rm.load(media.path) : rb.load(media.path); |
| 288 | } | 302 | } |
| 289 | 303 | ||
| 290 | - rb.listener( listener).apply(option).into(view); | 304 | + rb.listener(listener).apply(option).into(view); |
| 291 | } catch (Exception e) { | 305 | } catch (Exception e) { |
| 292 | } | 306 | } |
| 293 | } | 307 | } |
| 294 | 308 | ||
| 295 | - static long start=0; | ||
| 296 | 309 | ||
| 297 | @SuppressLint("CheckResult") | 310 | @SuppressLint("CheckResult") |
| 298 | public static void intoItemImageThumbnail(Context context, Media media, ImageView view, ProgressBar loading) { | 311 | public static void intoItemImageThumbnail(Context context, Media media, ImageView view, ProgressBar loading) { |
| 299 | if (context == null || media == null || view == null) return; | 312 | if (context == null || media == null || view == null) return; |
| 300 | - | ||
| 301 | RequestOptions option = new RequestOptions(); | 313 | RequestOptions option = new RequestOptions(); |
| 302 | - | ||
| 303 | try { | 314 | try { |
| 304 | Uri mediaUri = Uri.parse(media.fileUri); | 315 | Uri mediaUri = Uri.parse(media.fileUri); |
| 305 | - | ||
| 306 | - RequestManager rm = Glide.with(context); | ||
| 307 | - RequestBuilder rb = null; | ||
| 308 | - | ||
| 309 | view.setScaleType(ImageView.ScaleType.CENTER_CROP); | 316 | view.setScaleType(ImageView.ScaleType.CENTER_CROP); |
| 310 | - | ||
| 311 | if (FileTypeUtil.isGif(media.path)) { | 317 | if (FileTypeUtil.isGif(media.path)) { |
| 312 | -// rb = rm.asGif(); | ||
| 313 | } else { | 318 | } else { |
| 314 | option = option | 319 | option = option |
| 315 | - .diskCacheStrategy(DiskCacheStrategy.RESOURCE) | 320 | + .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC) |
| 316 | .dontAnimate(); | 321 | .dontAnimate(); |
| 317 | } | 322 | } |
| 318 | - | ||
| 319 | if (media.mediaType == 1) { | 323 | if (media.mediaType == 1) { |
| 320 | - option = option | ||
| 321 | - .error(R.drawable.iv_imgload_full_err); | 324 | + option = option.error(R.drawable.iv_imgload_full_err); |
| 322 | } | 325 | } |
| 323 | - | ||
| 324 | if (AndroidQUtil.isAndroidQ()) { | 326 | if (AndroidQUtil.isAndroidQ()) { |
| 325 | - rb = rb == null ? rm.load(mediaUri) : rb.load(mediaUri); | 327 | + showAndroidQ(context, media.mediaType, mediaUri, view, loading, option); |
| 326 | } else { | 328 | } else { |
| 327 | - rb = rb == null ? rm.load(media.path) : rb.load(media.path); | 329 | + if (media.mediaType == 1) { |
| 330 | + showNoAndroidQ(context, media.mediaType, media.path, view, loading, option); | ||
| 331 | +// showImageThumbnail(context, media.mediaType, media.id, media.path, view, loading, option); | ||
| 332 | + } else if (media.mediaType == 3) { | ||
| 333 | +// showNoAndroidQ(context, media.mediaType, media.path, view, loading, option); | ||
| 334 | + showVideoThumbnail(context, media.mediaType, media.id, media.path, view, loading, option); | ||
| 335 | + } | ||
| 336 | + | ||
| 328 | } | 337 | } |
| 329 | - rb.thumbnail(0.5f); | ||
| 330 | 338 | ||
| 331 | - rb.listener(new RequestListener() { | ||
| 332 | - @Override | ||
| 333 | - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { | ||
| 334 | - view.setScaleType(ImageView.ScaleType.CENTER); | ||
| 335 | - if (loading != null) loading.setVisibility(View.GONE); | ||
| 336 | - return false; | 339 | + |
| 340 | + } catch (Exception e) { | ||
| 341 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 342 | + } | ||
| 343 | + } | ||
| 344 | + | ||
| 345 | + private static void showAndroidQ(Context context, int mediaType, Uri mediaUri, ImageView view, ProgressBar loading, RequestOptions option) { | ||
| 346 | + Observable.create(new ObservableOnSubscribe<Bitmap>() { | ||
| 347 | + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) | ||
| 348 | + @Override | ||
| 349 | + public void subscribe(ObservableEmitter<Bitmap> emitter) throws Exception { | ||
| 350 | + ContentResolver contentResolver = context.getContentResolver(); | ||
| 351 | + Bitmap bm = contentResolver.loadThumbnail(mediaUri, new Size(100, 100), null); | ||
| 352 | + emitter.onNext(bm); | ||
| 353 | + } | ||
| 354 | + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Bitmap>() { | ||
| 355 | + @Override | ||
| 356 | + public void onSubscribe(Disposable d) { | ||
| 357 | + | ||
| 358 | + } | ||
| 359 | + | ||
| 360 | + @Override | ||
| 361 | + public void onNext(Bitmap bm) { | ||
| 362 | + | ||
| 363 | + RequestBuilder rb = Glide.with(context).load(bm); | ||
| 364 | + rb.listener(new RequestListener() { | ||
| 365 | + @Override | ||
| 366 | + public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { | ||
| 367 | + view.setScaleType(ImageView.ScaleType.CENTER); | ||
| 368 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 369 | + return false; | ||
| 370 | + } | ||
| 371 | + | ||
| 372 | + @Override | ||
| 373 | + public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { | ||
| 374 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 375 | + return false; | ||
| 376 | + } | ||
| 377 | + }); | ||
| 378 | + | ||
| 379 | + rb.apply(option).into(view); | ||
| 380 | + } | ||
| 381 | + | ||
| 382 | + @Override | ||
| 383 | + public void onError(Throwable e) { | ||
| 384 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 385 | + } | ||
| 386 | + | ||
| 387 | + @Override | ||
| 388 | + public void onComplete() { | ||
| 389 | + | ||
| 390 | + } | ||
| 391 | + }); | ||
| 392 | + } | ||
| 393 | + | ||
| 394 | + | ||
| 395 | + private static void showNoAndroidQ(Context context, int mediaType, String path, ImageView view, ProgressBar loading, RequestOptions option) { | ||
| 396 | + Observable.create(new ObservableOnSubscribe<String>() { | ||
| 397 | + @Override | ||
| 398 | + public void subscribe(ObservableEmitter<String> emitter) throws Exception { | ||
| 399 | + | ||
| 400 | + if (TextUtils.isEmpty(path)) { | ||
| 401 | + emitter.onError(new Throwable("")); | ||
| 402 | + } else { | ||
| 403 | + emitter.onNext(path); | ||
| 337 | } | 404 | } |
| 338 | 405 | ||
| 339 | - @Override | ||
| 340 | - public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { | ||
| 341 | - if (loading != null) loading.setVisibility(View.GONE); | 406 | + } |
| 407 | + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<String>() { | ||
| 408 | + @Override | ||
| 409 | + public void onSubscribe(Disposable d) { | ||
| 342 | 410 | ||
| 343 | - Log.e("加载:",System.currentTimeMillis()-start+""); | ||
| 344 | - return false; | 411 | + } |
| 412 | + | ||
| 413 | + @Override | ||
| 414 | + public void onNext(String thumbnails) { | ||
| 415 | + RequestBuilder rb = Glide.with(context).load(thumbnails); | ||
| 416 | + rb.listener(new RequestListener() { | ||
| 417 | + @Override | ||
| 418 | + public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { | ||
| 419 | + view.setScaleType(ImageView.ScaleType.CENTER); | ||
| 420 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 421 | + return false; | ||
| 422 | + } | ||
| 423 | + | ||
| 424 | + @Override | ||
| 425 | + public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { | ||
| 426 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 427 | + return false; | ||
| 428 | + } | ||
| 429 | + }); | ||
| 430 | + | ||
| 431 | + rb.apply(option).into(view); | ||
| 432 | + } | ||
| 433 | + | ||
| 434 | + @Override | ||
| 435 | + public void onError(Throwable e) { | ||
| 436 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 437 | + } | ||
| 438 | + | ||
| 439 | + @Override | ||
| 440 | + public void onComplete() { | ||
| 441 | + | ||
| 442 | + } | ||
| 443 | + }); | ||
| 444 | + } | ||
| 445 | + | ||
| 446 | + private static void showVideoThumbnail(Context context, int mediaType, int id, String path, ImageView view, ProgressBar loading, RequestOptions option) { | ||
| 447 | + Observable.create(new ObservableOnSubscribe<Bitmap>() { | ||
| 448 | + @Override | ||
| 449 | + public void subscribe(ObservableEmitter<Bitmap> emitter) throws Exception { | ||
| 450 | + Bitmap bm = null; | ||
| 451 | + if (mediaType == 1) { | ||
| 452 | + bm = getImageThumbnail(context, id + ""); | ||
| 453 | + emitter.onNext(bm); | ||
| 454 | + } else if (mediaType == 3) { | ||
| 455 | + bm = getVideoThumbnail(context, id + ""); | ||
| 456 | + emitter.onNext(bm); | ||
| 345 | } | 457 | } |
| 346 | - }); | ||
| 347 | 458 | ||
| 348 | - rb.apply(option).into(view); | ||
| 349 | - start= System.currentTimeMillis(); | 459 | + |
| 460 | + } | ||
| 461 | + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Bitmap>() { | ||
| 462 | + @Override | ||
| 463 | + public void onSubscribe(Disposable d) { | ||
| 464 | + | ||
| 465 | + } | ||
| 466 | + | ||
| 467 | + @Override | ||
| 468 | + public void onNext(Bitmap thumbnails) { | ||
| 469 | + if (thumbnails != null) { | ||
| 470 | + showThumbnail(context, thumbnails, view, loading, option); | ||
| 471 | + } else { | ||
| 472 | + showNoAndroidQ(context, mediaType, path, view, loading, option); | ||
| 473 | + } | ||
| 474 | + | ||
| 475 | + } | ||
| 476 | + | ||
| 477 | + @Override | ||
| 478 | + public void onError(Throwable e) { | ||
| 479 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 480 | + } | ||
| 481 | + | ||
| 482 | + @Override | ||
| 483 | + public void onComplete() { | ||
| 484 | + | ||
| 485 | + } | ||
| 486 | + }); | ||
| 487 | + } | ||
| 488 | + | ||
| 489 | + | ||
| 490 | + private static void showImageThumbnail(Context context, int mediaType, int id, String path, ImageView view, ProgressBar loading, RequestOptions option) { | ||
| 491 | + Observable.create(new ObservableOnSubscribe<Bitmap>() { | ||
| 492 | + @Override | ||
| 493 | + public void subscribe(ObservableEmitter<Bitmap> emitter) throws Exception { | ||
| 494 | + Bitmap bm = null; | ||
| 495 | + if (mediaType == 1) { | ||
| 496 | + bm = getImageThumbnail(context, id + ""); | ||
| 497 | + emitter.onNext(bm); | ||
| 498 | + } | ||
| 499 | + | ||
| 500 | + | ||
| 501 | + } | ||
| 502 | + }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Bitmap>() { | ||
| 503 | + @Override | ||
| 504 | + public void onSubscribe(Disposable d) { | ||
| 505 | + | ||
| 506 | + } | ||
| 507 | + | ||
| 508 | + @Override | ||
| 509 | + public void onNext(Bitmap thumbnails) { | ||
| 510 | + if (thumbnails != null) { | ||
| 511 | + showThumbnail(context, thumbnails, view, loading, option); | ||
| 512 | + } else { | ||
| 513 | + showNoAndroidQ(context, mediaType, path, view, loading, option); | ||
| 514 | + } | ||
| 515 | + | ||
| 516 | + } | ||
| 517 | + | ||
| 518 | + @Override | ||
| 519 | + public void onError(Throwable e) { | ||
| 520 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 521 | + } | ||
| 522 | + | ||
| 523 | + @Override | ||
| 524 | + public void onComplete() { | ||
| 525 | + | ||
| 526 | + } | ||
| 527 | + }); | ||
| 528 | + } | ||
| 529 | + | ||
| 530 | + private static void showThumbnail(Context context, Bitmap bm, ImageView view, ProgressBar loading, RequestOptions option) { | ||
| 531 | + RequestBuilder rb = Glide.with(context).load(bm); | ||
| 532 | + rb.listener(new RequestListener() { | ||
| 533 | + @Override | ||
| 534 | + public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { | ||
| 535 | + view.setScaleType(ImageView.ScaleType.CENTER); | ||
| 536 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 537 | + return false; | ||
| 538 | + } | ||
| 539 | + | ||
| 540 | + @Override | ||
| 541 | + public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { | ||
| 542 | + if (loading != null) loading.setVisibility(View.GONE); | ||
| 543 | + return false; | ||
| 544 | + } | ||
| 545 | + }); | ||
| 546 | + | ||
| 547 | + rb.apply(option).into(view); | ||
| 548 | + } | ||
| 549 | + | ||
| 550 | + | ||
| 551 | + public static Bitmap getVideoThumbnail(Context context, String videoId) { | ||
| 552 | + Cursor thumbCursor = null; | ||
| 553 | + Bitmap bitmap = null; | ||
| 554 | + try { | ||
| 555 | + thumbCursor = context.getApplicationContext().getContentResolver().query( | ||
| 556 | + MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, | ||
| 557 | + null, MediaStore.Video.Thumbnails.VIDEO_ID | ||
| 558 | + + "=" + videoId, null, null); | ||
| 559 | + if (thumbCursor.moveToFirst()) { | ||
| 560 | + String albumPath = thumbCursor.getString(thumbCursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA)); | ||
| 561 | + bitmap = BitmapFactory.decodeFile(albumPath); | ||
| 562 | + return bitmap; | ||
| 563 | + } | ||
| 350 | } catch (Exception e) { | 564 | } catch (Exception e) { |
| 351 | - if (loading != null) loading.setVisibility(View.GONE); | 565 | + return bitmap; |
| 566 | + } finally { | ||
| 567 | + if (thumbCursor != null) | ||
| 568 | + thumbCursor.close(); | ||
| 569 | + return bitmap; | ||
| 570 | + } | ||
| 571 | + } | ||
| 572 | + | ||
| 573 | + public static Bitmap getImageThumbnail(Context context, String videoId) { | ||
| 574 | + Bitmap bitmap = null; | ||
| 575 | + Cursor thumbCursor = null; | ||
| 576 | + | ||
| 577 | + | ||
| 578 | +// String[] projection = {MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.IMAGE_ID, | ||
| 579 | +// MediaStore.Images.Thumbnails.DATA}; | ||
| 580 | +// | ||
| 581 | +// Cursor cursor = context.getContentResolver().query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, null, null, null); | ||
| 582 | +// | ||
| 583 | + | ||
| 584 | + try { | ||
| 585 | + thumbCursor = context.getApplicationContext().getContentResolver().query( | ||
| 586 | + MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, | ||
| 587 | + null, MediaStore.Images.Thumbnails.IMAGE_ID | ||
| 588 | + + "=" + videoId, null, null); | ||
| 589 | + if (thumbCursor.moveToFirst()) { | ||
| 590 | + String albumPath = thumbCursor.getString(thumbCursor.getColumnIndex(MediaStore.Images.Thumbnails.DATA)); | ||
| 591 | + bitmap = BitmapFactory.decodeFile(albumPath); | ||
| 592 | + return bitmap; | ||
| 593 | + } | ||
| 594 | + } catch (Exception e) { | ||
| 595 | + return bitmap; | ||
| 596 | + } finally { | ||
| 597 | + if (thumbCursor != null) | ||
| 598 | + thumbCursor.close(); | ||
| 599 | + return bitmap; | ||
| 352 | } | 600 | } |
| 353 | } | 601 | } |
| 354 | 602 | ||
| @@ -414,7 +662,7 @@ public class GlideCacheUtil { | @@ -414,7 +662,7 @@ public class GlideCacheUtil { | ||
| 414 | RequestBuilder rb = null; | 662 | RequestBuilder rb = null; |
| 415 | option = option | 663 | option = option |
| 416 | .dontTransform() | 664 | .dontTransform() |
| 417 | - .diskCacheStrategy(DiskCacheStrategy.RESOURCE) | 665 | + .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC) |
| 418 | .dontAnimate(); | 666 | .dontAnimate(); |
| 419 | option.error(R.drawable.iv_imgload_full_err); | 667 | option.error(R.drawable.iv_imgload_full_err); |
| 420 | 668 |
lib_media/src/main/java/com/cnlive/media/utils/ThumbnailsUtils.java
0 → 100644
| 1 | +package com.cnlive.media.utils; | ||
| 2 | + | ||
| 3 | +import android.content.Context; | ||
| 4 | +import android.database.Cursor; | ||
| 5 | +import android.net.Uri; | ||
| 6 | +import android.provider.MediaStore; | ||
| 7 | +import android.util.Log; | ||
| 8 | + | ||
| 9 | +import java.util.HashMap; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * 作 者 : wkq | ||
| 13 | + * <p> | ||
| 14 | + * 时 间 : 2021/1/25 15:18 | ||
| 15 | + * <p> | ||
| 16 | + * 名 字 : ThumbnailsUtils | ||
| 17 | + * <p> | ||
| 18 | + * 简 介 : | ||
| 19 | + */ | ||
| 20 | +public class ThumbnailsUtils { | ||
| 21 | + static HashMap<String, String> thumbnails = new HashMap<String, String>(); | ||
| 22 | + | ||
| 23 | + public static void getThumbnails(Context context) { | ||
| 24 | + String[] projection = {MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.IMAGE_ID, | ||
| 25 | + MediaStore.Images.Thumbnails.DATA}; | ||
| 26 | + | ||
| 27 | + Cursor cursor = context.getContentResolver().query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, null, null, null); | ||
| 28 | + if (cursor == null) return; | ||
| 29 | + while (cursor.moveToNext()) { | ||
| 30 | + int _id; | ||
| 31 | + int image_id; | ||
| 32 | + String image_path; | ||
| 33 | + int _idColumn = cursor.getColumnIndex(MediaStore.Images.Thumbnails._ID); | ||
| 34 | + int image_idColumn = cursor.getColumnIndex(MediaStore.Images.Thumbnails.IMAGE_ID); | ||
| 35 | + int dataColumn = cursor.getColumnIndex(MediaStore.Images.Thumbnails.DATA); | ||
| 36 | + _id = cursor.getInt(_idColumn); | ||
| 37 | + image_id = cursor.getInt(image_idColumn); | ||
| 38 | + image_path = cursor.getString(dataColumn); | ||
| 39 | + Log.e("image_path:", _id+"-->"+image_id + "-->" + image_path); | ||
| 40 | + thumbnails.put(image_id + "", image_path); | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + | ||
| 47 | +} |