Android图片加载尺寸监控

前言

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

效果图

Android图片加载尺寸监控_第1张图片

如果网络图片的尺寸,大于本地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() {
                    @Override
                    public void onResourceReady(final Bitmap resource, GlideAnimation 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图片加载尺寸监控)