【问题标题】:how to dowload and load .gif in android using volley?如何使用 volley 在 android 中下载和加载 .gif?
【发布时间】:2016-07-10 06:57:33
【问题描述】:

我正在使用这个 gif 库 https://github.com/koral--/android-gif-drawable 为了在 xml 和 gifImageView 中显示 gif 作为视图,我在 volley 中使用 ImageRequest 从 url 下载 gif。但 gif 在应用程序中显示为静止图像。无法弄清楚发生了什么?请帮助我编写代码或告诉我如何通过 volley 下载 gif。

变量定义:-

SwipeDeck cardSwipe;
String url = "";
ImageView iv;
RequestQueue que;
RequestQueue que2;
SwipeCardAdapter adapter;
ArrayList<Bitmap> urls = new ArrayList<>();

这是用于获取 Json 的 stringRequest 函数块

public StringRequest strReq(){

    StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONObject jsonObject = new JSONObject(response);
                JSONArray dataObject = jsonObject.getJSONArray("data");

                for(int i = 0 ; i < dataObject.length() ; i++){
                    JSONObject thisObject = dataObject.getJSONObject(i);
                    JSONObject image = thisObject.getJSONObject("images");
                    JSONObject imageType = image.getJSONObject("original");
                    String imageUrl = imageType.getString("url");
                    Log.d("TAG", imageUrl);
                    URL url = new URL(imageUrl);
                    que2.add(imageReq(imageUrl));

                }

            } catch (JSONException e) {
                e.printStackTrace();
                Log.d("TAG","error occured in try and catch");

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            if(error.getCause() != null){
                error.getCause().printStackTrace();
            }
            if(error.networkResponse != null){
                Toast.makeText(MainActivity.this, "Network Response is " + error.networkResponse , Toast.LENGTH_SHORT).show();
            }

        }
    });


            return stringRequest;
}

这是从 url 下载 gif 的 imageRequest 功能块:-

public ImageRequest imageReq(String url){

        ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap response) {

                urls.add(response);

                adapter.notifyDataSetChanged();



            }
        }, 0, 0, null, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                if(error.getCause() != null){
                    error.getCause().printStackTrace();
                }
                if(error.networkResponse != null){
                    Toast.makeText(MainActivity.this, "Network Response is " + error.networkResponse , Toast.LENGTH_SHORT).show();
                }

            }
        });
        return imageRequest;
    }

和这个在适配器类里面设置gifImageView:-

GifImageView gifImageView = (GifImageView) convertView.findViewById(R.id.gifIV);


            Bitmap thisGif = getItem(position);

            gifImageView.setImageBitmap(thisGif);

【问题讨论】:

    标签: android android-volley gif android-json


    【解决方案1】:

    我不完全确定您为什么使用 GifDrawable 库,Glide 库要好得多。 https://github.com/bumptech/glide

    Glide.with(mContext).load(image.getMedium())
                    .thumbnail(0.5f)
                    .crossFade()
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .into(holder.thumbnail);
    

    【讨论】:

    • 非常感谢 Glide 使用 GlideDrawableImageViewTarget 工作。
    • 此外,如果您阅读示例,您可以非常健壮地扩展 glide,首先您可能还需要研究 DiskCacheStrategy
    • 不错,我使用占位符来显示加载屏幕,虽然我还不能为加载设置动画,但它很好,我使用了 CrossFade 和错误,我一定会研究 DiskCacheStrategy 并将其应用到我的应用程序。再次感谢您
    • 使用 glide3.7.0 一旦图像完全加载,它应该使用上述源正确动画。您有两种选择,具体取决于适合您的方式
    • 1 DiskCacheStrategy.SOURCE 和 2 将 .crossfade 替换为 .asGif,您还可以使用 gifdrawable 库中的视图吗?这将动画成基本的 布局抱歉我在移动端
    猜你喜欢
    • 2015-06-29
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2016-08-04
    相关资源
    最近更新 更多