写点什么

Android 小巧技 - 不用图片框架,实现加载类似微博超长图片的手法

作者:芝麻粒儿
  • 2022 年 7 月 09 日
  • 本文字数:1923 字

    阅读完需:约 6 分钟

Android 小巧技-不用图片框架,实现加载类似微博超长图片的手法

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!专注于 Android/Unity 和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)

👉即将学会

比如有这样一个需求:公司紧急需要加进去说明书,内容很长,写布局又不合适,单纯的 ImageView 又不理想,是不是很困扰?

借助分割图片,摆脱框架,轻轻松松用 Android 自带组件实现加载超长图片。

👉背景

🙎小芝:小空我这有个很大的图片,你有推荐的图片框架吗,我学习下是怎么实现的。

🙈小空:多大?有那么大吗(比划),不用什么框架,有个小技巧立马实现。

👉实践过程

这个方法重在思维,其实有时候解决一个问题不需要想的太多。



思路:

  1. 很长的内容,滑动肯定需要 ScrollView

  2. Scrollview 里面放置 LinearLayout,动态代码,addView(ImageView);效果成功

可能遇到的问题:

第一:当图片添加进去之后,图片没有顶头开始,而是最上最下留有空区域;

第二:当图片太长了,超过了系统的临界值,无法渲染图片;

上面思路有了,我们直接开车:


   <ScrollView            android:id="@+id/scroll"            android:layout_width="fill_parent"            android:layout_height="fill_parent" >             <LinearLayout                android:id="@+id/showImageView"                android:layout_width="fill_parent"                android:layout_height="wrap_content"                android:orientation="vertical" >            </LinearLayout>        </ScrollView>
复制代码


LinearLayout showImageView= (LinearLayout) findViewById(R.id.ll_group); ImageView imageView = new ImageView(this); imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); //设置图片宽高 imageView.setImageResource(R.drawable.ic_launcher); //图片资源 showImageView.addView(imageView); //动态添加图片
复制代码


运行后你会发现,呀,成功了,可总是感觉哪里不对!!!



没错,你发现上面和最下面都留有很大的空隙。

为啥呢?

其实是没有设置好填充导致的。小空带你两行代码搞定。


		//给你的imageview添加2个属性		imageView.setScaleType(ScaleType.FIT_XY); // 解决上下空白问题		imageView.setAdjustViewBounds(true); // 解决图片失真
复制代码


当你看到这,发现还没重点?确实,上面方式很普通,重点来了。

把那张很大的图切割成许多小图,然后多 new 几个 ImageView,多 addView 几次


再看看效果发现完全正确,就这么简单,有时候思路对了真的很重要。

在这小空补充点知识,是在实现过程中了解的。

ImageView 的 adjustViewBounds 属性取值为 true 时:

Adjust the ImageView's bounds to preserve the aspect ration of its drawable.

调整 ImageView 的界限来保持图像纵横比不变。

这并不意味着 ImageView 的纵横比就一定和图像的纵横比相同。

他会将这个 ImageView 的 scaleType 设为 fitCenter。不过这个 fitCenter 会被后面定义的 scaleType 属性覆盖(如果定义了的话),除非在 Java 代码里再次显示调用 setAdjustViewBounds(true)。

如果设置的 layout_width 与 layout_height 都是定值,那么设置 adjustViewBounds 是没有效果的,ImageView 将始终是设定的定值的宽高。 

如果设置的 layout_width 与 layout_height 都是 wrap_content,那么设置 adjustViewBounds 是没有意义的,因为 ImageView 将始终与图片拥有相同的宽高比(但是并不是相同的宽高值,通常都会放大一些)。

但是

如果两者中一个是定值,一个是 wrap_content,比如 layout_width="100px",layout_height="wrap_content"时,ImageView 的宽将始终是 100px,而高则分两种情况:

  1. 当图片的宽小于 100px 时,layout_height 将与图片的高相同,即图片不会缩放,完整显示在 ImageView 中,ImageView 高度与图片实际高度相同。图片没有占满 ImageView,ImageView 中有空白。 

  2. 当图片的宽大于等于 100px 时,此时 ImageView 将与图片拥有相同的宽高比,因此 ImageView 的 layout_height 值为:100 除以图片的宽高比。比如图片是 500X500 的,那么 layout_height 是 100。图片将保持宽高比缩放,完整显示在 ImageView 中,并且完全占满 ImageView。 

好啦!!!快乐的内容总是很短暂,今天就到这里了,下期我们见。

👉其他

📢作者:小空和小芝中的小空

📢转载说明-务必注明来源:https://www.infoq.cn/profile/DB2492B85795C4/publish

📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

发布于: 刚刚阅读数: 3
用户头像

芝麻粒儿

关注

尺有所短;寸有所长。 2020.08.29 加入

👑CSDN博客专家-华为云享专家-Android/Unity领域优质作者 🏅目前在模拟医学行业做Android/Unity双端开发 🏆微信公众号:【空名先生】 🏆QQ交流群:204918251或877807592

评论

发布
暂无评论
Android 小巧技-不用图片框架,实现加载类似微博超长图片的手法_android_芝麻粒儿_InfoQ写作社区