首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >截击NetworkImageView

截击NetworkImageView
EN

Stack Overflow用户
提问于 2016-02-13 20:48:44
回答 1查看 580关注 0票数 0

我有一个GridView,其中的图像是由Volley库从网络中获取的。当我点击一个项目时,图片会在下载后以全屏全屏打开,这需要一些时间。所以我用AppBar更改了它,但我仍然使用相同的方法来显示它,这同样需要同样的时间。

这就是:

代码语言:javascript
复制
private void fetchFullResolutionImage() {
    String url = selectedPhoto.getPhotoJson();

    // volley's json obj request
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET, url,
            (String)null, new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {
            Log.d(TAG,
                    "Image full resolution json: "
                            + response.toString());
            try {
                // Parsing the json response
                JSONObject entry = response
                        .getJSONObject(TAG_ENTRY);

                JSONArray mediacontentArry = entry.getJSONObject(
                        TAG_MEDIA_GROUP).getJSONArray(
                        TAG_MEDIA_CONTENT);

                JSONObject mediaObj = (JSONObject) mediacontentArry
                        .get(0);

                String fullResolutionUrl = mediaObj
                        .getString(TAG_IMG_URL);

                // image full resolution widht and height
                final int width = mediaObj.getInt(TAG_IMG_WIDTH);
                final int height = mediaObj.getInt(TAG_IMG_HEIGHT);

                Log.d(TAG, "Full resolution image. url: "
                        + fullResolutionUrl + ", w: " + width
                        + ", h: " + height);

                ImageLoader imageLoader = AppController
                        .getInstance().getImageLoader();

                // We download image into ImageView instead of
                // NetworkImageView to have callback methods
                // Currently NetworkImageView doesn't have callback
                // methods

                imageLoader.get(fullResolutionUrl,
                        new ImageLoader.ImageListener() {

                            @Override
                            public void onErrorResponse(
                                    VolleyError arg0) {
                                Toast.makeText(
                                        getApplicationContext(),
                                        getString(R.string.msg_wall_fetch_error),
                                        Toast.LENGTH_LONG).show();
                            }

                            @Override
                            public void onResponse(
                                    ImageLoader.ImageContainer response,
                                    boolean arg1) {
                                if (response.getBitmap() != null) {
                                    // load bitmap into imageview
                                    backdrop
                                            .setImageBitmap(response
                                                    .getBitmap());
                                    }
                            }
                        });

            } catch (JSONException e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(),
                        getString(R.string.msg_unknown_error),
                        Toast.LENGTH_LONG).show();
            }

        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Error: " + error.getMessage());
            // unable to fetch wallpapers
            // either google username is wrong or
            // devices doesn't have internet connection
            Toast.makeText(getApplicationContext(),
                    getString(R.string.msg_wall_fetch_error),
                    Toast.LENGTH_LONG).show();

        }
    });

    // Remove the url from cache
    AppController.getInstance().getRequestQueue().getCache().remove(url);

    // Disable the cache for this url, so that it always fetches updated
    // json
    jsonObjReq.setShouldCache(false);

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(jsonObjReq);
}

所以我在想的可能是,我可以在下一个活动中显示图像,这是在AppBar中,将是相同的网络图像(缩略图),它已经加载到网格视图中,所以它可能会更快。

因此,我所要求的是在下一个活动的NetworkImageView中显示从gridView中选择的相同图像。

EN

回答 1

Stack Overflow用户

发布于 2016-02-13 22:12:25

您必须对图像进行缓存才能重用它们。请通过this杰克给出了一个在链接中缓存的漂亮解决方案。希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35380045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档