美文网首页安卓开发博客
Android图片加载尺寸监控

Android图片加载尺寸监控

作者: 在寻找雪见的景天 | 来源:发表于2018-06-25 18:41 被阅读39次

    前言

    安卓开发过程中,很多时候都会用到加载网络图片,而加载这些网络图片往往又很占内存,所以,我们最好对这些图片进行一个监控。比如说,imageView的宽和高为40dp,然后经过转换,大概是120px左右。也就是说,我们加载的图片尺寸,其实只要120px就行了。如果后台返回的图片尺寸是300px*300px,那多出的180px是没有意义的,只会浪费内存和流量。所以,我们在开发的时候,要对图片进行一个监控。

    效果图


    如果网络图片的尺寸,大于本地imageview设置的尺寸,并且超过一定数值(比如超过100px),就弹框显示,展示这张图片,还有在哪个Activity,图片链接,网络图片和本地imageview的尺寸对比。然后再把这些信息告诉后端,让他们下发尺寸小一点的网络图片。

    代码实现

    首先是建立一个统一加载图片的方法,这个一般都会有:

        /**
         * 加载网络图片
         */
        public void loadUrlImage(final Activity activity, final String url, final ImageView imageView) {
            Glide.with(activity).load(url).into(imageView);
            if (isShowDialog) {
                checkImgSize(activity, url, imageView);
            }
        }
    

    然后,就是判断,开发版就开启图片监控:,然后去获取网络图片的尺寸:

        /**
         * 获取网络图片尺寸
         */
        private void checkImgSize(final Activity activity, final String url, final ImageView imageView) {
            Glide.with(activity)
                    .load(url)
                    .asBitmap()
                    .into(new SimpleTarget<Bitmap>() {
                        @Override
                        public void onResourceReady(final Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                            imageView.post(new Runnable() {
                                @Override
                                public void run() {
                                    if (resource.getWidth() - imageView.getWidth() > imgSize || resource.getHeight() - imageView.getHeight() > imgSize) {
                                        showDialog(activity, url, resource.getWidth(), resource.getHeight(), imageView.getWidth(), imageView.getHeight());
                                    }
                                }
                            });
                        }
    
                        @Override
                        public void onLoadFailed(Exception e, Drawable errorDrawable) {
    
                        }
                    });
        }
    

    然后根据获取的图片尺寸和本地的进行比较,如果超出了当初设置的值,那就弹框显示:

        /**
         * 弹框
         */
        private void showDialog(Activity activity, final String url, int urlWidth, int urlHeight, int imgWidth, int imgHeight) {
            SharedPreferences sp = activity.getSharedPreferences("imgSizeSp", MODE_PRIVATE);
            final SharedPreferences.Editor editor = sp.edit();
            final String urls = sp.getString("img", "");
            if ((dialog == null || (dialog != null && !dialog.isShowing())) && !urls.contains(url)) {
                dialog = new Dialog(activity);
                View view = LayoutInflater.from(activity).inflate(R.layout.show_img_size_dialog, null);
                TextView textView = (TextView) view.findViewById(R.id.tv_content);
                ImageView imageView = (ImageView) view.findViewById(R.id.iv_pic);
                Button btn_notip = (Button) view.findViewById(R.id.btn_notip);
                Button btn_cancel = (Button) view.findViewById(R.id.btn_cancel);
                Glide.with(activity).load(url).into(imageView);
                btn_cancel.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });
                btn_notip.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        editor.putString("img", urls + url).apply();
                        dialog.dismiss();
                    }
                });
                textView.setText(activity.getLocalClassName() + "\n\n" + url + "\n\n" + "图片超出View尺寸\nbitmap:" + urlWidth + " * " + urlHeight + "\nview:" + imgWidth + " * " + imgHeight);
                dialog.setContentView(view);
                dialog.show();
            }
        }
    

    总结

    思路大概就是这样,代码优化就看人吧。

    相关文章

      网友评论

        本文标题:Android图片加载尺寸监控

        本文链接:https://www.haomeiwen.com/subject/ijtuyftx.html