mirror of
https://github.com/status-im/react-native-camera-kit.git
synced 2025-02-28 15:40:47 +00:00
Seriously improved GalleryAdapter
This commit is contained in:
parent
efde2ccff6
commit
960b34a73a
@ -1,10 +1,10 @@
|
|||||||
package com.wix.RNCameraKit;
|
package com.wix.RNCameraKit;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.Color;
|
||||||
import android.os.AsyncTask;
|
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@ -12,6 +12,10 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.concurrent.LinkedBlockingDeque;
|
||||||
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by yedidyak on 30/06/2016.
|
* Created by yedidyak on 30/06/2016.
|
||||||
@ -20,25 +24,32 @@ public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.StupidHo
|
|||||||
|
|
||||||
|
|
||||||
public static final String[] PROJECTION = new String[]{
|
public static final String[] PROJECTION = new String[]{
|
||||||
MediaStore.Images.Media.DATA
|
MediaStore.Images.Media.DATA,
|
||||||
|
MediaStore.Images.Media._ID
|
||||||
};
|
};
|
||||||
|
|
||||||
private ArrayList<String> images = new ArrayList<>();
|
private ArrayList<String> uris = new ArrayList<>();
|
||||||
|
private ArrayList<Integer> ids = new ArrayList<>();
|
||||||
|
|
||||||
public class StupidHolder extends RecyclerView.ViewHolder {
|
public class StupidHolder extends RecyclerView.ViewHolder {
|
||||||
public StupidHolder(View itemView) {
|
public StupidHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
}
|
}
|
||||||
|
int id;
|
||||||
|
String uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Context context;
|
private Context context;
|
||||||
|
private ThreadPoolExecutor executor;
|
||||||
|
|
||||||
public GalleryAdapter(Context context) {
|
public GalleryAdapter(Context context) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
int cores = Runtime.getRuntime().availableProcessors();
|
||||||
|
executor = new ThreadPoolExecutor(cores, cores, 1, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAlbum(String albumName) {
|
public void setAlbum(String albumName) {
|
||||||
images.clear();
|
ids.clear();
|
||||||
|
|
||||||
String selection = null;
|
String selection = null;
|
||||||
if(albumName != null || !albumName.equals("All Photos")) {
|
if(albumName != null || !albumName.equals("All Photos")) {
|
||||||
@ -55,11 +66,16 @@ public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.StupidHo
|
|||||||
|
|
||||||
if (cursor.moveToFirst()) {
|
if (cursor.moveToFirst()) {
|
||||||
int dataIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
|
int dataIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
|
||||||
|
int idIndex = cursor.getColumnIndex(MediaStore.Images.Media._ID);
|
||||||
do {
|
do {
|
||||||
images.add(cursor.getString(dataIndex));
|
uris.add(cursor.getString(dataIndex));
|
||||||
|
ids.add(cursor.getInt(idIndex));
|
||||||
} while(cursor.moveToNext());
|
} while(cursor.moveToNext());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Collections.reverse(uris);
|
||||||
|
Collections.reverse(ids);
|
||||||
|
|
||||||
cursor.close();
|
cursor.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,29 +88,42 @@ public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.StupidHo
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
v.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
v.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||||
|
v.setBackgroundColor(Color.LTGRAY);
|
||||||
return new StupidHolder(v);
|
return new StupidHolder(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(final StupidHolder holder, final int position) {
|
public void onBindViewHolder(final StupidHolder holder, final int position) {
|
||||||
|
|
||||||
new AsyncTask<Void, Void, Bitmap>() {
|
final ImageView imageView = (ImageView)holder.itemView;
|
||||||
@Override
|
imageView.setImageBitmap(null);
|
||||||
protected Bitmap doInBackground(Void... params) {
|
imageView.setBackgroundColor(Color.LTGRAY);
|
||||||
BitmapFactory.Options options = new BitmapFactory.Options();
|
holder.id = ids.get(position);
|
||||||
options.inSampleSize = 2;
|
holder.uri = uris.get(position);
|
||||||
return BitmapFactory.decodeFile(images.get(position), options);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
executor.execute(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(Bitmap bitmap) {
|
public void run() {
|
||||||
((ImageView)holder.itemView).setImageBitmap(bitmap);
|
final Bitmap bmp = MediaStore.Images.Thumbnails.getThumbnail(
|
||||||
|
context.getContentResolver(),
|
||||||
|
ids.get(holder.getAdapterPosition()),
|
||||||
|
MediaStore.Images.Thumbnails.MINI_KIND,
|
||||||
|
null);
|
||||||
|
|
||||||
|
if (holder.id == ids.get(holder.getAdapterPosition())) {
|
||||||
|
((Activity) context).runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
imageView.setImageBitmap(bmp);
|
||||||
}
|
}
|
||||||
}.execute();
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
return images.size();
|
return ids.size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,8 +24,6 @@ public class GalleryViewManager extends SimpleViewManager<GalleryView> {
|
|||||||
view.setAlbumName(albumName);
|
view.setAlbumName(albumName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ReactProp(name = "minimumInteritemSpacing")
|
@ReactProp(name = "minimumInteritemSpacing")
|
||||||
public void setItemSpacing(GalleryView view, int itemSpacing) {
|
public void setItemSpacing(GalleryView view, int itemSpacing) {
|
||||||
view.setItemSpacing(itemSpacing/2);
|
view.setItemSpacing(itemSpacing/2);
|
||||||
@ -40,5 +38,4 @@ public class GalleryViewManager extends SimpleViewManager<GalleryView> {
|
|||||||
public void setColumnCount(GalleryView view, int columnCount) {
|
public void setColumnCount(GalleryView view, int columnCount) {
|
||||||
view.setColumnCount(columnCount);
|
view.setColumnCount(columnCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -94,6 +94,7 @@ public class NativeGalleryModule extends ReactContextBaseJavaModule {
|
|||||||
}
|
}
|
||||||
} while (imagesCursor.moveToNext());
|
} while (imagesCursor.moveToNext());
|
||||||
}
|
}
|
||||||
|
imagesCursor.close();
|
||||||
return albums;
|
return albums;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user