android监控删除图像,Android图片加载尺寸监控

前言

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

效果图

fa1c4fbf4f57?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

如果网络图片的尺寸,大于本地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 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();

}

}

总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值