使用Fresco library android/java将图像从手机加载到我的应用程序
你好,我是Fresco的新手,我正在尝试将手机中的所有图像加载到应用程序中 当我使用此URI时:使用Fresco library android/java将图像从手机加载到我的应用程序,java,android,fresco,Java,Android,Fresco,你好,我是Fresco的新手,我正在尝试将手机中的所有图像加载到应用程序中 当我使用此URI时:/storage/emulated/0/DCIM/Camera/20200206_222309.jpg 使用此代码: ControllerListener listener=new BaseControllerListener(); DraineController控制器=Fresco.newDraineControllerBuilder() .setUri(xuri) .setTapToRetryE
/storage/emulated/0/DCIM/Camera/20200206_222309.jpg
使用此代码:
ControllerListener listener=new BaseControllerListener();
DraineController控制器=Fresco.newDraineControllerBuilder()
.setUri(xuri)
.setTapToRetryEnabled(真)
.setControllerListener(侦听器)
.build();
PhotoFragmentRecycler.setController(控制器);
仅加载名为20200206_222309.jpg
的照片
如何加载所有图像?
提前感谢您的问题不取决于所使用的图像库。您基本上希望获得所有相机图像的列表。 类似这样的内容应该会让您获得所有URI的列表:
fun getMediaStoreUris(context: Context): List<Uri> {
val uris = mutableListOf<Uri>()
context.contentResolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
arrayOf(MediaStore.Images.Media._ID),
null,
null,
null)?.use {
val dataIndex = it.getColumnIndexOrThrow(MediaStore.Images.Media._ID)
while (it.moveToNext()) {
uris.add(
ContentUris.withAppendedId(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
it.getLong(dataIndex)))
}
}
return uris
}
Fresco在其Showcase示例应用程序中提供了完整的示例:
如果您允许访问本地存储,这将起作用,有一个指南或测试它,只需转到应用程序的“应用程序信息”并手动允许即可
这是一个非常简单的解决方案,实际上,您可能希望为媒体存储实现分页等。但这应该会指引你正确的方向。简单,用
Glide
库代替。Glide比fresco好吗?“表演中”@AspicasSure。您可以检查glide
和picasso
库。它们非常相似(有不同的选项),看起来问题更多的是如何获取URI列表,而不是使用哪个库。我添加了一个答案,以便更详细地解释。
public class SimpleAdapter extends RecyclerView.Adapter<SimpleViewHolder> {
private List<Uri> mUris;
SimpleAdapter(List<Uri> uris) {
mUris = uris;
setHasStableIds(true);
}
@Override
public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView =
LayoutInflater.from(parent.getContext())
.inflate(R.layout.drawee_recycler_item, parent, false);
return new SimpleViewHolder(itemView);
}
@Override
public void onBindViewHolder(SimpleViewHolder holder, int position) {
holder.mSimpleDraweeView.setImageURI(mUris.get(position));
}
@Override
public int getItemCount() {
return mUris.size();
}
@Override
public long getItemId(int position) {
return mUris.get(position).hashCode();
}
public void setData(List<Uri> uris) {
mUris = uris;
notifyDataSetChanged();
}
}
static class SimpleViewHolder extends RecyclerView.ViewHolder {
private final SimpleDraweeView mSimpleDraweeView;
SimpleViewHolder(View itemView) {
super(itemView);
mSimpleDraweeView = itemView.findViewById(R.id.drawee_view);
}
}
final SimpleAdapter adapter = new SimpleAdapter(getMediaStoreUris(context));
recyclerView.setAdapter(adapter);