【Android】实现ImageView的scaleType的 “topCrop”

我们要展示一个长图上部分(600 * 850的图片 展示在100 * 200的ImageView上。优先展示上部分,相当于将centerCrop改为topCrop)如下图:
在这里插入图片描述

我们都知道ImageView的scaleType的centerCrop是我们最常用的,会按最合适的比例裁剪,保留中间部分。还是这个图片,效果如下图:
在这里插入图片描述
但是需求是展示顶部;

思路:我们计算出图片的宽高,然后将高度安装既定的比例裁剪。得到顶部的一个图片。然后再展示到imageView上

方案1:

计算图片宽高:方式有很多种,我们仅列一种:

//通过glide获取宽高以及bitmap
Glide.with(context).asBitmap() 
     .load(url)
     .into(new SimpleTarget<Bitmap>() {
    
    
          @Override
          public void onResourceReady(@NonNull @NotNull Bitmap resource, @Nullable @org.jetbrains.annotations.Nullable Transition<? super Bitmap> transition) {
    
    
            int maxWidth  = resource.getWidth();
            int maxHeight = resource.getHeight() * (176 * 100 / 315) / 100;
                try {
    
    
                     //裁剪获取(0, 0, maxWidth, maxHeight)范围的图像
                    Bitmap smallBitmap =Bitmap.createBitmap(resource, 0, 0, maxWidth, maxHeight);  
                    iv_image_xxl.setImageBitmap(smallBitmap);
                } catch (Exception ex) {
    
    
					LxUtils.setImage(context, url, holder.iv_image_xxl);
              }
          }
  });

方案2:阿里OSS的图片(如果合适,优先采用)

如果是使用的阿里云OSS储存的图片。那样还有更简介的方式:

我们可以通过oss图片处理(缩放+裁剪)来得到我们想要的图片

虽然oss提供了获取图片的信息:
在这里插入图片描述
但是这样需要网络请求,不采取

可以通过图片缩放+自定义裁剪去处理;
其他处理方式可自行查看文档

1.缩放,将图片缩放至一个合适的比例。这样为的是得到一个我们已知的宽度。
2.根据比例。算出我们要得到的高度
3.根据宽高进行裁剪(裁剪规则如下图url

原图:

在这里插入图片描述

https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg

结果图片:

在这里插入图片描述

https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_800,limit_0/crop,w_800,h_300

如果裁剪时候高度不够。那样我们可以通过android自带的scaleType的centerCrop再去适配。

方案3:七牛OSS的图片(如果合适,优先采用)

原理同上

直接给出文档(缩放文档+自定义裁剪)+最后的裁剪方案

原图:

在这里插入图片描述
https://oss.p74.cn/homepageImg_408390.jpg

结果图片:

在这里插入图片描述

https://oss.p74.cn/homepageImg_408390.jpg?imageMogr2/thumbnail/1000x/crop/!1000x400a0a0

大功告成

猜你喜欢

转载自blog.csdn.net/mingtiannihao0522/article/details/123566882
今日推荐