android imageview stretchblt,Android 滚动RecyclerView加载图片时的流畅度优化

实现:使用onScrollStateChanged回调检测滚动状态,并在RecyclerViewAdapter内部设置类似isScrolling的状态值来控制网络图片的加载。

下面是代码举例:

// BaseAdapter中添加如下代码

public abstract class BaseRecyclerViewAdapter extends RecyclerView.Adapter {

……

protected boolean isScrolling = false;

……

public void setScrolling(boolean scrolling) {

isScrolling = scrolling;

}

}

具体的子Adapter实现:

// 在子Adapter中的onBind里进行控制

public class SubRecyclerViewAdapter extends BaseRecyclerViewAdapter {

……

@Override

public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {

RecyclerViewHolder holder = (RecyclerViewHolder) viewHolder;

……

if (!TextUtils.isEmpty(data.getAvatarUrl()) && !isScrolling) {

// 这里可以用Glide等网络图片加载库

} else {

holder.avatarImg.setImageResource(占位图本地资源);

}

super.onBindViewHolder(holder, position);

}

}

在UI层进行监听:

// 外部对RecyclerView设置监听

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

@Override

public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

// 查看源码可知State有三种状态:SCROLL_STATE_IDLE(静止)、SCROLL_STATE_DRAGGING(上升)、SCROLL_STATE_SETTLING(下落)

if (newState == SCROLL_STATE_IDLE) { // 滚动静止时才加载图片资源,极大提升流畅度

mRecyclerViewAdapter.setScrolling(false);

mRecyclerViewAdapter.notifyDataSetChanged(); // notify调用后onBindViewHolder会响应调用

} else

mRecyclerViewAdapter.setScrolling(true);

super.onScrollStateChanged(recyclerView, newState);

}

});

mRecyclerView.setAdapter(mRecyclerViewAdapter);

Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果

 Android Glide加载图片时转换为圆形.圆角.毛玻璃等图片效果 附录1简单介绍了Android开源的图片加载框架.在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬 ...

Android的ListView异步加载图片时,错位、重复、闪烁问题的分析及解决方法

Android ListView异步加载图片错位.重复.闪烁分析以及解决方案,具体问题分析以及解决方案请看下文. 我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图 ...

又优化了一下 Android ListView 异步加载图片

写这篇文章并不是教大家怎么样用listview异步加载图片,因为这样的文章在网上已经有很多了,比如这位仁兄写的就很好: http://www.iteye.com/topic/685986 我也是因为看 ...

Android之批量加载图片OOM问题解决方案

一.OOM问题出现的场景和原因 一个好的app总少不了精美的图片,所以Android开发中图片的加载总是避免不了的,而在加载图片过程中,如果处理不当则会出现OOM的问题.那么如何彻底解决这个问题呢?本 ...

转:Android ListView 异步加载图片

http://www.iteye.com/topic/1118828 http://www.iteye.com/topic/1127914 这样做无疑是非常可取的方法,但是加载图片时仍然会感觉到轻微的 ...

向下滚动页面加载图片的js

js代码 scroll.photo.js : window.imgscroll = { options: { target: null, //插入图片的目标位置 img_list: null, //图 ...

android列表停止滚动,加载图片,较为通用的一种办法

在Adapter的itemView里面,判断列表是否在滚动中,其实是比较麻烦的,可能耦合性会比较严重. 所以考虑了下,是否能在itemView里面,检测列表的滚动状态,并监听停止状态加载图片,实现it ...

Android GridView异步加载图片和加载大量图片时出现Out Of Memory问题

我们在使用GridView或者ListView时,通常会遇到两个棘手的问题: 1.每个Item获取的数据所用的时间太长会导致程序长时间黑屏,更甚会导致程序ANR,也就是Application No R ...

android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存

经常会用到 网络文件 比如查看大图片数据 资源优化的问题,当然用开源的项目  Android-Universal-Image-Loader  或者 ignition 都是个很好的选择. 在这里把原来 ...

随机推荐

HoverTree项目已经实现分层

HoverTree项目已经初步实现分层,源代码已经上传到 http://hovertree.com/down/ 请到SOURCE CODE查看. 在本地用SQL Server 2008 数据库测试成功 ...

经典的Java基础面试题集锦

经典的Java基础面试题集锦,欢迎收藏和分享. 问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”. 问题:Java里的传引用 ...

[转载]JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合

在ajax中经常需要对元素的位置进行精确的定位,此时不仅需要获取元素自身的大小位置等属性.还需要知道页面.浏览器.滚动条等的长度和宽度.因为浏览器的兼容问题,如果使用javascript获取这些数值是 ...

selenium + python自动化测试环境搭建--亲测

环境准备: 1.下载所学安装包: setuptools https://pypi.python.org/packages/2.7/s/setuptools/ selenium https://pypi ...

模拟摇奖:从1-36中随机抽出8个不重复的数字(math)

public class Yaojiang { public static void main(String[] args) { // TODO 自动生成的方法存根 int[] a=new int[8 ...

md5爆破工具

http://www.myhack58.com/Article/html/3/8/2015/65021.htm http://xlixli.net/?p=410 http://blog.csdn.ne ...

hdu 5381

题解: 还是比较水的一道题 首先可以发现每个数最多被除log次,所以有连续一段相同 然后我想的是变成矩形统计前缀和问题用主席树来维护 然后发现这题很卡空间 qwq acm依旧很多64mb的题 首先比较 ...

Swift 里 Array (一)内存结构

public struct Array: _DestructorSafeContainer { #if _runtime(_ObjC) @usableFromInline ...

java面试第十六天

国际化:让世界上每个人都能看懂. Locale类(java.util包下):包括所有国家.地区.语言 存在很多的静态属性,来表示国家.语言 三种构造方法: Locale(String language ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值