Android通过scaleType裁剪缩放图片适配不同屏幕不同ImageView尺寸

简介: Android通过scaleType裁剪缩放图片适配不同屏幕不同ImageView尺寸实验方法,先找一张不规则大图,尺寸:1024pix(宽) X  1465pix(高),原图如图:然后特意设置一个ImageView宽高均为600pix。
Android通过scaleType裁剪缩放图片适配不同屏幕不同ImageView尺寸


实验方法,先找一张不规则大图,尺寸:1024pix(宽) X  1465pix(高),原图如图:




然后特意设置一个ImageView宽高均为600pix。观察不同scaleType配置下,Android对原图的裁剪缩放效果。左侧为代码,右侧为缩放和裁剪效果。
(1)android:scaleType="fitXY"

可见是铺面整个ImageView进行拉伸缩放。不对原图进行裁剪,仅仅缩放。


(2)android:scaleType="center"

这种情况下,要对原图裁剪,以图片中心为基准,以中心向四周出发,裁剪原图刚好为600pix X 600pix放到ImageView里面。


(3)android:scaleType="centerInside"

以图片中心为等比例缩放的基准,这种配置会使图片通过等比例放大或缩小一定落入到ImageView里面,缩放直到原图有一个象限(宽或高)触碰到ImageView的宽高为至,当然前提是整个图必须都得缩放到这个ImageView里面。就像本例一样,Android会对原图等比例缩放,缩放后的高度就是ImageView的高度,而宽度则不够,所以两边留空白(蓝色细线区域内即是)。
如果原图宽大与高,那么本例显示的结果是原图缩放后的宽度和ImageView一样宽,由于高度缩放后不够,那么ImageView的高度(上方,下方)就会出现空白。这样的配置没有裁剪,仅是缩放。

(4)android:scaleType="centerCrop"

这种情况下结合了center和centerInside的特性。centerCrop将对原图进行等比例缩放后裁剪,可以看到原图片的顶部和底部已经被裁剪掉,缩放后的图片宽度和ImageView宽度一直,高度上进行剪除掉。

上面提供的原图是一张宽小于高的图。下面再试一张宽比高大的图,1592pix(宽) X 1080Pix(高),原图:


这次设置四个ImageView宽高均为400pix,代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="400px"
        android:layout_height="400px"
        android:layout_alignParentLeft="true"
        android:background="@android:color/holo_blue_bright"
        android:scaleType="centerInside"
        android:src="@drawable/img" />

    <ImageView
        android:layout_width="400px"
        android:layout_height="400px"
        android:layout_alignParentRight="true"
        android:scaleType="centerCrop"
        android:src="@drawable/img" />

    <ImageView
        android:layout_width="400px"
        android:layout_height="400px"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:scaleType="center"
        android:src="@drawable/img" />

    <ImageView
        android:layout_width="400px"
        android:layout_height="400px"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:scaleType="fitXY"
        android:src="@drawable/img" />
</RelativeLayout>
结果如图:

fitXY,center和centerInside比如容易理解,scaleType中比较重要和比较难以理解的是centerCrop,对比本例中两张宽高不相同的图片等比例缩放效果可以总结出来,centerCrop的裁剪和缩放,是在对原图等比例缩放过程中,宽高两个属性谁先触碰到ImageView的宽高就停止缩放,然后剪除另外一侧。比如在缩放过程中,缩放图的高先等于ImageView的高,那么就剪除宽;如果图的宽在缩放过程中先等于ImageView的宽,那么就剪除高。

现在的App在启动时候,会有一个广告或者称之为启动页的图,闪现而过,作为一个过渡的图画,然后进入App内容。这种情况下,可以利用android:scaleType="centerCrop"属性,但是前提是手机屏幕都是瘦长的屏幕(高比宽大),这样Android会把原图的宽和手机屏幕一样宽,但是高的部分Android对它们裁剪截取掉。所以,设计和UI出的图,也要配合着做成高比宽大的图方可。
相关文章
|
1月前
|
XML 前端开发 Android开发
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
40 2
|
3月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
72 20
Android经典面试题之图片Bitmap怎么做优化
|
7月前
|
Android开发
Android通过手势(多点)缩放和拖拽图片
Android通过手势(多点)缩放和拖拽图片
58 4
|
7月前
|
Java Android开发
android 下载图片的问题
android 下载图片的问题
50 3
|
7月前
|
开发工具 Android开发
rk平台Android12屏幕永不休眠
rk平台Android12屏幕永不休眠
118 1
|
3月前
|
编解码 开发工具 Android开发
Android平台实现屏幕录制(屏幕投影)|音频播放采集|麦克风采集并推送RTMP或轻量级RTSP服务
Android平台屏幕采集、音频播放声音采集、麦克风采集编码打包推送到RTMP和轻量级RTSP服务的相关技术实现,做成高稳定低延迟的同屏系统,还需要有配套好的RTMP、RTSP直播播放器
|
4月前
|
数据处理 开发工具 数据安全/隐私保护
Android平台RTMP推送|轻量级RTSP服务|GB28181接入之文字、png图片水印的精进之路
本文探讨了Android平台上推流模块中添加文字与PNG水印的技术演进。自2015年起,为了满足应急指挥及安防领域的需求,逐步发展出三代水印技术:第一代为静态文字与图像水印;第二代实现了动态更新水印内容的能力,例如实时位置与时间信息;至第三代,则优化了数据传输效率,直接使用Bitmap对象传递水印数据至JNI层,减少了内存拷贝次数。这些迭代不仅提升了用户体验和技术效率,也体现了开发者追求极致与不断创新的精神。
|
4月前
|
自然语言处理 定位技术 API
Android经典实战之如何获取图片的经纬度以及如何根据经纬度获取对应的地点名称
本文介绍如何在Android中从图片提取地理位置信息并转换为地址。首先利用`ExifInterface`获取图片内的经纬度,然后通过`Geocoder`将经纬度转为地址。注意操作需在子线程进行且考虑多语言支持。
270 4
|
4月前
|
Java Android开发 Kotlin
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
41 0
|
4月前
|
XML 前端开发 Android开发
Android经典实战之Kotlin中实现圆角图片和圆形图片
本文介绍两种实现圆角图像视图的方法。第一种是通过自定义Kotlin `AppCompatImageView`,重写`onDraw`方法使用`Canvas`和`Path`进行圆角剪裁。第二种利用Android Material库中的`ShapeableImageView`,简单配置即可实现圆角效果。两种方法均易于实现且提供动态调整圆角半径的功能。
93 0