Android 小巧技-不用图片框架,实现加载类似微博超长图片的手法
👉关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
👉即将学会
比如有这样一个需求:公司紧急需要加进去说明书,内容很长,写布局又不合适,单纯的ImageView又不理想,是不是很困扰?
借助分割图片,摆脱框架,轻轻松松用Android自带组件实现加载超长图片。
👉背景
🙎小芝:小空我这有个很大的图片,你有推荐的图片框架吗,我学习下是怎么实现的。
🙈小空:多大?有那么大吗(比划),不用什么框架,有个小技巧立马实现。
👉实践过程
这个方法重在思维,其实有时候解决一个问题不需要想的太多。
思路:
- 很长的内容,滑动肯定需要ScrollView
- 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,而高则分两种情况:
- 当图片的宽小于100px时,layout_height将与图片的高相同,即图片不会缩放,完整显示在ImageView中,ImageView高度与图片实际高度相同。图片没有占满ImageView,ImageView中有空白。
- 当图片的宽大于等于100px时,此时ImageView将与图片拥有相同的宽高比,因此ImageView的layout_height值为:100除以图片的宽高比。比如图片是500X500的,那么layout_height是100。图片将保持宽高比缩放,完整显示在ImageView中,并且完全占满ImageView。
好啦!!!快乐的内容总是很短暂,今天就到这里了,下期我们见。
📢作者:小空和小芝中的小空
📢转载说明:务必注明来源:https://zhima.blog.csdn.net/
📢欢迎点赞👍收藏🌟留言📝
- 点赞
- 收藏
- 关注作者
评论(0)