最近离职了, 求包养求带走..也是够惆怅了, 回家做了个手术,对鼻子造成了成吨的伤害,痛的我是侧夜不眠呀,不过也趁机刷了一波怪,学习了不关于framework、设计模式的知识。
因为本人也比较懒,只要高效的,少量的代码可以实现全面的功能的东西都喜欢拿来鼓捣一下,最近灌github,codeKK等开源网站,发现很多开源的框架让我兴奋的不能自已,不过也感觉有不足的地方,功能比较针对性,不够全面,故此,就想把他们都整理一下,组装组装成更加方便的组件MRecyclerView,开源给大家来使用。
地址:https://github.com/a371166028/MRecyclerView
下啦刷新,上拉加载更多(可DIY):
支持多种动画:
多个ItemType(只需30行代码):
Android懒人专用RecyclerView+懒人专用Adapter+懒人专用animator+下拉刷新上拉加载更多(可DIY)
特别声明:开源框架并不是本人亲手敲出来的,本人只是站在巨人的肩膀上,整合别人优秀的代码写成Demo,拿来就用,希望方便到各位.
1.LoadingIndicator的用法,:
类别:
AVLoadingIndicatorView.BallBeat,
AVLoadingIndicatorView.BallClipRotate,
AVLoadingIndicatorView.BallGridBeat,
AVLoadingIndicatorView.BallPulse,
AVLoadingIndicatorView.BallRotate,
AVLoadingIndicatorView.BallSpinFadeLoader,
AVLoadingIndicatorView.BallTrianglePath,
AVLoadingIndicatorView.BallZigZagDeflect,
AVLoadingIndicatorView.CubeTransition,
AVLoadingIndicatorView.LineScaleParty,
AVLoadingIndicatorView.Pacman,
AVLoadingIndicatorView.SemiCircleSpin,
AVLoadingIndicatorView.SquareSpin,
AVLoadingIndicatorView.TriangleSkewSpin
用法:
mRecyclerView.setLoadingMoreProgressStyle(AVLoadingIndicatorView.BallBeat);
mRecyclerView.setRefreshProgressStyle(AVLoadingIndicatorView.BallClipRotate);
此外还可以自定义,只需要修改listview_header.xml的样式即可,可以添加各种喜欢的动画效果.这里难度不大,在次略过.
2.下面重点介绍下XReyclerView.
这个控件可以说是非常让我兴奋的,因为之前使用过XlistView,在其可以实现下拉刷新,上拉加载更多功能上深得喜爱,可定制型也非常强,可以自己实现成类似于京东,淘宝等下拉刷新动画效果.令人遗憾的是,support包中的RecyclerView是越来越火了,并且以其一妓之长击败了ListView和GridView拿到双杀.
本人感觉原因大概有以下三点:
1.具有更加优秀的RecycleBin机制,比AbsListView更好的处理new和回收过程.
2.爸爸级展示效果,可以一列,双列,还有decoration等等,可以很自由的旋转.
3.ItemAnimation, 现在app在性能上已不是主题, 用户体验才是目标了, 而各种酷炫的动画效果则是提高用户体验的重要因素.
=============分割线=================
一不小心又B了那么多,其实XRecyclerView用法没多大难度,跟RecyclerView用法一样,哎,就是这么简单粗暴咯.
3.ItemAnimator
承上启下,ItemAnimator确实让人兴奋,虽然比不上5.0以上的transition动画,但是有了这些动画, 用起来也能够挺爽的不要不要的了.不信你看↓..
AnimationAdapter: 这是一个装饰了RecyclerView.Adapter的类.其主要改造的地方在这里:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { mAdapter.onBindViewHolder(holder, position);
int adapterPosition = holder.getAdapterPosition();
if (!isFirstOnly || adapterPosition > mLastPosition) {
for (Animator anim : getAnimators(holder.itemView)) {
anim.setDuration(mDuration).start();
anim.setInterpolator(mInterpolator);
}
mLastPosition = adapterPosition;
} else {
ViewHelper.clear(holder.itemView);
}
}
由于上面可以看出,在Item展示的时候是逐个读取动画来执行,并且提供了isFirstOnly 来配置是否只是第一次展示的时候才执行动画.
通过 AnimationAdapter.setFirstOnly(true);来设置.
但是 AnimationAdapter是一个抽象类, 需要重载一个类来实现里面的getAnimators方法.
详细写法可参照demo里的
ChooseAnimatorsAdapter类.
也可以查看Xrecyclerview包下的animators包,里面提供了很多已经写好的AnimatorAdapters类,拿来即用,懒嘛..哈哈
另外提一下, 在下拉刷新和动画并不和侧滑冲突,爽爽哒
4.重头戏:BaseAdapter, 这个叼,这个叼.
我用过两种baseadapter ,一个是基于JoanZapata/base-adapter-helper 主要用于absListView,而另外一个是基于张鸿杨大神的baseAdapter,两个用法基本一样.以国产为例,recyclerview的Adapter只要声明一个CommonAdapter实现convert方法.在做数据处理.其他的丢给框架去封装就行了,看代码.
mRecyclerView.setAdapter(new CommonAdapter(this, R.layout.item_list, mDatas)
{
@Override public void convert(ViewHolder holder, String s)
{
holder.setText(R.id.id_item_list_title, s);
}
});
只要对holder进行各种操作即可,holder里面的功能有限,不过可以根据自身需求添加.各种方法如:holder.setImageUrl(id,url);可以省去很多load img方法重写. 值得开心的是:产品狗一般不让一个recyclerview里面只放一种item. 这个框架作者也考虑到了这点, 写法稍微复杂点,不过有兴趣的去看下张大神的github哈,里面有更详细的baseadapter用法的介绍: 链接:https://github.com/hongyangAndroid/baseAdapter 还有很多功能没提,大家细细探索哈..
THANKS PROVIDE:
ItemAnimators: https://github.com/wasabeef/recyclerview-animators
BaseAdapter: https://github.com/hongyangAndroid/baseAdapter
LoadingIndicator: https://github.com/81813780/AVLoadingIndicatorView
SwipeItem: https://github.com/daimajia/AndroidSwipeLayout
如以上内容造成侵权 敬请告知删除,谢谢! 联系QQ: 371166028 邮箱:[email protected]