android中在ImageView中完美填充一张Bitmap图片

Android自定义圆角圆形ImageView实战(高效实现方案) 本文深入探讨了Android自定义圆角圆形ImageView的高效实现方案。通过继承原生ImageView并利用BitmapShader核心原理,在保留scaleType等原生特性的基础上,实现了高性能的圆角与圆形绘制,有效避免了内存抖动与OOM问题,并提供了边框、状态支持等进阶功能与避坑指南。 阅读详情

有人说我们用ImageView的scaleType就可以完美解决任何问题,但是实验过你就会发现,还是会有问题。

问题1:过大的Bitmap。当给ImageView填充一张(2000+)*(4000+)的千万级像素左右的图片时,ImageView不能显示,变成了黑屏。

问题2:过小的图片,为了能充分利用屏幕的空间,自然要把小的图片"尽可能"地放大。我们要做得,就是按比例缩放/扩大图片,使得长或者宽的其中一个小于等于ImageView的长或宽。

为了解决以上两个问题:

CENTER /center  按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示

CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)

CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽

FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示

FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置

FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置

FIT_XY / fitXY 把图片不按比例扩大/缩小到View的大小显示

MATRIX / matrix 用矩阵来绘制

其中

center:和屏幕比例不符的图片会被截取,所以不行。

centerCrop:同上。

centerInside:不能将小图放大,而且笔者在用它放置和设备长宽比例一致的图片时,出现了黑边,从测试发现是Bitmap并没有覆盖全ImageView。

fitCenter:问题1虽然不能解决,但看样子是最接近我们要求效果的一个,但是同样的,测试时发现了黑边。

fitEnd/fitStart:这两个不居中的就不讨论了。

matrix:它不能满足我们按比例放大/缩小的要求。

因为黑边的关系, 我就不能完全信任ImageView的自动缩放功能了,最后笔者选择了手动调整Bitmap的尺寸+ScaleType=center (它不支持缩放,但我们已经自己手动缩放完毕了)解决了。

要点:

1.如果竖屏要展示横屏的图片,就要把它作缩放处理,同样地,对于过大的图片,我们都会要求把它缩小到长和宽都小于等于设备长宽为止。

2.反之,对于过小的图片,我们都会要求把它扩大到长或宽的一者等于设备长宽为止。

3.在XML中要定义ImageView的scaleType="center"

关键代码:

private void createScaledBitmap(){
		DisplayMetrics dm = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(dm);
		int width = dm.widthPixels+1;
		int height = dm.heightPixels+1;
		int t_width;
		int t_height;
		if (bitmap.getWidth()>width || bitmap.getHeight()>height){
			t_width = width;
			t_height = bitmap.getHeight()*width/bitmap.getWidth();
			if (t_height>height){
				t_width = t_width*height/t_height;
				t_height = height;
			}
		} else
		if (bitmap.getWidth()<width && bitmap.getHeight()<height){
			t_width = width;
			t_height = bitmap.getHeight()*width/bitmap.getWidth();
			if (t_height>height){
				t_width = t_width*height/t_height;
				t_height = height;
			}
		} else {
			t_width = bitmap.getWidth();
			t_height = bitmap.getHeight();
		}
		bitmap = Bitmap.createScaledBitmap(bitmap, t_width, t_height, true);
	}



Android中使用SVG 简介 可缩放矢量图形(英语:Scalable Vector Graphics,SVG)是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。SVG由W3C制定,是一个开放标准。——摘自维基百科 它和位图(Bitmap)相对,SVG不会像位图一样因为缩放而让图片质量下降。图像与分辨率无关,收放自如,适配安卓机坑爹的分辨率真是一劳永逸。它的优点在于节约空间,使用方便 Android也... 阅读详情

相关推荐

LruCache与DiskLruCache的使用

在前面的Bitmap文章中提到,Bitmap在使用中非常容易出现OOM,而本节主要介绍2个方法对加载多图/大图的情况进行优化,有效的避免OOM。 1.LruCache缓存 在使用RecyclerView、ListView等加载多图时,屏幕上显示的图片会通过滑动屏幕等事件不断地增加,最终导致OOM。为了保证内存始终维持在一个合理的范围,当item移除屏幕时要对图片进行回收,重新滚入屏幕时又要重新加载...

qq_34341338的博客 1029

ImageView,Bitmap的浅析

多low,也得做好总结——题记 一个app客户端启动时候,一般会在开始的欢迎界面展示图片,这时候会用的ImageView组件负责展示(一般是静态图片),图片的处理(包括缩放等)则需要用的Bitmap类来处理,这是这个两个类在功能上的区别,今天看了公司的项目,发现了欢迎界面的图片展示是通过这样的逻辑实现的: 1.将图片A放到资源包里面 2.在欢迎界面中,使用imageview组件,宽度为mat

lichangshun3的博客 975

第六篇Android--ImageView、Bitmap

Android ImageView加载Bitmap

牛永志的专栏 2116

Android ImageView 与Bitmap互相转换

Android ImageView 与Bitmap互相转换

GUOZIJUN01的博客 2702

Android----高德地图多个Marker加载网络图片出现图片不显示问题

需求说要地图上展示的是mark,不是infowindow,加载出网络图片,由于app的marker比较多,没有达到需要的效果。 看了看高德地图api中有这个方法 markerOption.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.location...

知道的越多,不知道的越多。 4394

Qt QChart实战:从零打造一个实时温度监控仪表盘(附完整源码)

本文详细介绍了如何使用Qt QChart模块从零构建一个工业级实时温度监控仪表盘。通过实战案例,展示了波形图的绘制、坐标轴配置、数据流模拟等关键技术,并提供了完整的源码实现,帮助开发者快速掌握Qt在数据可视化领域的应用。

weixin_42537919的博客 243

Bitmap加载于imageView的一些坑

1.imageView加载的Bitmap,如果想要设置相同的大小,就是bitmap可以刚好填充好整个imageVie

jq的专栏 7674

在Ultralytics YOLO中添加/更换模块详细指南

使用参数继承 my_module_args: &my_args [64, 3, 0.5] # 定义参数模板 backbone: - [-1, 1, MyModule, *my_args] # 引用参数。

MR_Colorful的博客 2584

从Imageview中获取bitmap

从Imageview中获取bitmap的方式好几种,这是其中一种有效的方式 一:通过ImageView获取drawable对象 Drawable drawable = imageView.getDrawable();Bitmap bitmap = getBitmap(drawable); 二:通过drawable获取bitmap private Bitmap getBitm

fanenqian的博客 8407

FPGA_AD9361实战

1.参考网站。

Pual_Georg的博客 749

YOLOv8改进 | 主干网络 | 将主干网络替换为轻量化的ShuffleNetv2【原理 + 完整代码】

yolov8,yolov8创新,yolov8改进

kay_545 2565

android加载长图宽度自适应,Android ImageView加载长图

需求一个Activity页面纯展示一张长图,看起来功能是简单的,可还是有些坑存在。记录一下。坑要做UI适配,UI给的长图并不能正合适完美展示。宽高比不能确定,在ImageView上设置要么拉伸变形,要么图片不能铺满,与最初的UI设计不符,那这个时候就需要用到Android的屏幕适配了。解决方案根据图片的宽高比,计算出并动态设置ImageView的宽和高。代码布局:android:layout_wi...

weixin_35773740的博客 918

机器人的“大脑”进化论:从专用控制器到高性能SoC的异构计算时代

摘要:随着AI与机器人技术融合,高性能芯片成为机器人智能化的关键。本文分析了机器人对芯片的核心需求,包括多模态数据处理、实时控制和智能决策能力。系统级芯片(SoC)因集成CPU、GPU/NPU等模块而成为主流选择。市场呈现分层格局:中低端设备(如扫地机器人)采用"MCU+轻量SoC"方案,满足基础功能;高端机器人则依赖"高性能SoC+独立GPU"处理复杂任务。除主控芯片外,完整的机器人系统还需传感器接口、驱动、通信等配套芯片。未来,芯片技术的进步将持续推动机器人智能化

致力于lidar应用开发 83

imageview设置资源图片

以背景的形式 进行设置图片 缺点 : 图片容易变形 优点: 可以不用关心图片的大小 直接填充窗体 image2.setBackground(getResources().getDrawable(R.drawable.blackk));//变形 image2.setBackgroundResource(R.drawable.blackk);//变形 im

q9104422999的博客 1万+

【Autosar COM】Marvell 88Q5050 以太网交换机驱动技术解析

本驱动实现了对Marvell 88Q5050交换机的全面控制,通过模块化设计满足AUTOSAR规范要求。增加DMA加速机制提升大数据量处理性能实现TSN(时间敏感网络)特性支持引入异步通知机制替代轮询操作增强安全特性,如MACsec支持该驱动架构为车载以太网交换机控制提供了可靠基础,其设计思想可推广到其他车载网络控制器开发中。随着车载网络技术的演进,驱动需持续迭代以支持新特性与更高通信速率需求。

1451

进阶05:Labview与汇川PLC通过OPC UA通信(AM500系列)

本文介绍了LabVIEW与汇川PLC通过OPC UA通信的实现方法。主要内容包括:1)编写汇川AM521 PLC结构化文本程序,配置OPC UA服务器并导出变量;2)使用UaExpert客户端测试读取PLC变量;3)开发C#封装库实现OPC UA连接、读写和订阅功能;4)在LabVIEW中创建通信类,封装dll功能;5)设计LabVIEW界面实现变量读写和PLC程序触发。最终实现了PLC变量监控、数据读写及Y1-Y4输出控制功能,为自动化系统开发提供了基础框架。

weixin_38637405的博客 1302

Android图片等比例缩放 填充屏幕

第一种方法:在ImageView的t同事设置两个属性 android:adjustViewBounds="true" android:scaleType="fitXY 第二中方法:用IamgeView的android:scaleType 设置属性的时候 填充屏幕出现的各种问题 /** * 将图片等比例缩放 setAdjustViewBound...

weixin_30505485的博客 322

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 475

圆形ImageView

控件来源https://github.com/hdodenhof/CircleImageView 这里说一下简单实用方法 自己的项目中使用的话,需要写一个类class CircleImageView extends ImageView : 可能获取有的Android版本不一致,继承的类改为: android.support.v7.widget.AppCompatImageView 如果需要使用,复...

Autumn_leavess的博客 828

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android Bitmap内存管理与性能优化全解析

在Android应用开发中,内存管理是影响应用性能与稳定性的核心环节。其原理在于Android系统采用Java堆与Native堆的双层内存模型,不同版本对内存分配策略有显著差异。这一机制的技术价值在于,通过精细控制内存使用,可有效避免OOM(内存溢出)崩溃,提升应用流畅度与用户体验。尤其在处理图像资源时,Bitmap作为图形系统的基石,其内存占用直接影响应用性能。应用场景广泛覆盖图片加载、列表展示、大图浏览等常见功能。本文聚焦Bitmap的内存模型、采样率计算与复用机制,结合OOM崩溃分析与inBitmap

weixin_34332905的博客 683

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

android 显示多个图片不显示,Android----高德地图多个Marker加载网络图片出现图片不显示问题...

地图上展示如上mark,不是infowindow。首先这种是自定义的mark,看了下MarkerOptions和Marker的Api,两个类均被final修饰,因此,自定义marker这个想法放弃 。高德地图api中有这个方法markerOption.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getR...

weixin_31459035的博客 531

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android学习 - 小知识(Image几个简单设置)

ImageView的android:scaleType="fitXY"属性设置让图片填满整个layout ImageView显示jpg文件: ImageView imView = new ImageView(this); int imageResource =getResources().getIdentifier("pic"+icnt,"drawable",getPackageNa

wolflz的专栏 434

Android图片加载框架设计与冷启动优化:从LRU到线程池的完整实战

在客户端开发中,图片加载与启动性能优化是绕不开的核心难题。无论是列表滑动卡顿、低端机内存溢出,还是App冷启动过慢,往往都指向同一类技术问题:如何设计一套高效、稳定、可扩展的图片加载框架。LRU缓存淘汰算法作为内存管理的基石,通过LinkedHashMap的有序特性实现最近最少使用策略,能在有限内存下最大化缓存命中率。而线程池的合理配置则保证了并发请求不阻塞主线程,避免界面掉帧。结合采样解码、磁盘缓存、生命周期感知等机制,可在提升加载速度的同时显著降低OOM风险。这类技术广泛适用于电商、资讯、社交类App的

weixin_30411819的博客 300

完美解决glide+StaggeredGridLayoutManager 图片加载大小不正常的问题

先说下我的目标,公司要求每张图片宽度是充满item的,高度是根据图片高度缩放的,所以要求用瀑布流实现, 但是我当我用SwipeToLoadLayout 做下拉刷新的时候,发现每次加载图片,大小都有可能不一样,但是 首次加载的时候. 图片显示是正常的,我猜测,这个跟glide的图片缓存有关系, 但是当我设置 glie的skipMemoryCache(true),不让他缓存 还

SongCongCong_scc 2259

如何复现HSMR训练全流程?Hydra配置系统与WebDataset数据管线深度教程

HSMR("Reconstructing Humans with a Biomechanically Accurate Skeleton",CVPR 2025 Oral)是用生物力学精确骨骼 SKEL 从单张图像重建人体的模型。本文带你**从零复现 HSMR 的完整训练流程**,并深入拆解它最出彩的两块设计:一套基于 Hydra 的模块化配置系统,以及一套高吞吐的 WebDataset 流式数据管

gitblog_00641的博客 151

我的Android进阶之旅------>Android使用9Patch图片作为不失真背景

做人要大度,海纳百川,做事要圆滑,左右逢源,这让我想到了编程也是如此,代码要扩展,界面也要考虑自适应。 这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用。 1.背景自适应且不失真问题的存在       制作自适应背景图片是UI开发的一个广泛问题,也是界面设计师渴望解决的问题,我相信我们彼此都深有体会。       比如,列表的背景图一定,但是列

goodmentc的专栏 668
上一篇: android 保存对象(object)数据
下一篇: 用laravel4.2实现一个简单的图片墙博客(一)项目初始+数据库建立
ipip2005
博客等级 码龄17年 100粉丝 20原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值