Android高效进阶:从数据到AI【1.5】

 根据缩放比将图片加载到内存中

主要通过使用 Bitmap 的 compress 方法对磁盘上的图片进行压缩,并且存储到内存中:

1. ByteArrayOutputStream bos = new ByteArrayOutputStream();
2. bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
3. byte[] bitmapdata = bos.toByteArray();

上面代码中的 100 表示与原图保持相同的质量,控制其大小能有效减少对内存空间的占用。但是要注意,在改变 compress 方法中的质量参数的时候,压缩格式应该是 JPEG。若压缩格式被设置为 PNG,则任何修改都是无效的。
4.列表图片很多时,快速来回滑动会卡顿

无论是用 ListView 还是用 RecyclerView 作为列表的承载,当信息流中的每个 item 项都有图片且图片比较大时,快速来回上下滑动,很多时候会发生页面掉帧厉害的现象,也就是出现了列表卡顿。究其原因是,在列表高速滑动的时候,已经在子线程中加载好的图片会在主线程中被重新绘制到 ImageView 控件上。由于上下来回高速滑动,将导致 item 项频繁重用和销毁,进而导致图片中的 Bitmap 被频繁地创建和销毁。因此,解决方案就是,在列表发生滚动的情况下,暂停加载当前 ImageView 中的图片(包括下载、解码、设置等一系列操作);在列表停止滚动后,恢复 ImageView 中图片的下载任务(也包含下载、解码、设置等一系列操作)。

 针对 ListView

1. listView.setOnScrollListener(new AbsListView.OnScrollListener() {
2. @Override
3. public void onScrollStateChanged(AbsListView view, int scrollState) {
4. switch (scrollState){
5. case SCROLL_STATE_FLING:
6. //暂停图片加载
7. break;
8. case SCROLL_STATE_IDLE:
9. //恢复图片加载
10. break;
11. }
12. }
13.
14. @Override
15. public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
16.
17. }
18. });

 针对 RecyclerView
 

1. recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
2. @Override
3. public void onScrollStateChanged(RecyclerView recyclerView, int
newState) {
4. switch (newState) {
5. case RecyclerView.SCROLL_STATE_IDLE:
6. //恢复图片加载

7. break;
8. case RecyclerView.SCROLL_STATE_SETTLING:
9. //暂停图片加载

10. break;
11. }
1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值