java - 将 Assets 文件夹中的自定义 gif 加载到 recyclerview android

标签 java android assets

我在 assets 文件夹中创建了一个名为 gifs 的子文件夹,我在其中添加了 5 个 gifs。我想在 recyclerview 中显示这些 gif,但由于 recyclerview 是空的,所以我无法做到。我不明白哪里出了问题,请帮助我。提前致谢!

public class GifAdapter extends RecyclerView.Adapter < GifAdapter.GifViewHolder > {
    Context context;
    List<String> gifList;
    GifAdapterListener listener;

    public GifAdapter(Context context, GifAdapterListener listener) {
        this.context = context;
        this.gifList = loadGifs();
        this.listener = listener;
    }

    private List<String> loadGifs() {
        List<String> gifs = new ArrayList();
        gifs.add("a.gif");
        gifs.add("aa.gif");
        gifs.add("aaa.gif");
        gifs.add("aaaa.gif");
        gifs.add("aaaaa.gif");
        return gifs;
    }

    // more code

    // onBindViewHolder
    @Override public void onBindViewHolder(@NonNull GifViewHolder holder, int position) {

        try {
            InputStream inputStream = context.getAssets().open("gifs");
            byte[] bytes = IOUtils.toByteArray(inputStream);
            holder.gifView.setBytes(bytes); // gifView is GifImageView using felipecsl.gifimageview library
            holder.gifView.startAnimation();

        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    // my fragment oncreate

    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_gif, container, false);

        recyclerGifs = view.findViewById(R.id.recyclerGifs);
        recyclerGifs.setHasFixedSize(true);
        recyclerGifs.setLayoutManager(new GridLayoutManager(getActivity(), 2));
        gifAdapter = new GifAdapter(getContext(), this);
        recyclerGifs.setAdapter(gifAdapter);


        return view;
    }
}

最佳答案

Make use of Glide and get gifs from assets like this:

private List<String> loadGifs() {
    List<String> gifs = new ArrayList();
    gifs.add("file:///android_asset/a.gif");
    gifs.add("file:///android_asset/aa.gif");
    gifs.add("file:///android_asset/aaa.gif");
    return gifs;
}

Then load:

 @Override
 public void onBindViewHolder(@NonNull GifViewHolder holder, int position) {
            Glide.with(this).asGif().load(gifs(position)).into(imageView);
 }

Simple example to load GIF:

ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(this).asGif().load(R.raw.image_gif).into(imageView);

关于java - 将 Assets 文件夹中的自定义 gif 加载到 recyclerview android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57141824/

相关文章:

java - 如何在 Timepicker 中选择上午或下午时间?

javascript - Heroku 中的 Assets 编译 Ckeditor Rails

java - 如何从 boolean 方法返回整数?

执行了Java垃圾回收,但未收到GC通知

Java多线程:Start 2 threads, 轮流打印1-100。结果是这样的:但它没有运行

java - 在android中并行下载位图

android - 如何使用 Android 从 json 对象获取最大值/最大值?

java - 如何做整数对的集合?

ios - 是否必须使用 Assets.xcassets?

android - 如何从 Assets 文件夹或原始文件夹在android中播放视频?