Android学习之RecylerView实习仿支付宝充值界面
来源:互联网 发布:淘宝店铺开通花呗 编辑:程序博客网 时间:2024/05/16 07:00
今天周末,闲来无事,做了一个仿支付宝充值界面,主要知识点用RecylerView的GridlayoutManager布局管理器,实现不同数据类型,填充不同布局,功能包括单击选中,双击取消,支持可输入金额等。
首先来看一下设计图
ok,首先我们来分析一下功能
主体部分实现是由recylerview来实现,因为考虑到扩展性,所以一般都不会用xml来实现主体界面,支持点击选中,再次点击取消选中。
采用RecylerView的GridlayoutManager布局管理器,分三列,这些都类似于GridView,不作解释,难点在于(adapter如何实现两种布局),因为还包含了可输入的EditText。
哈哈,其实RecylerView早就解决了这个问题
分析完毕,下面来看实现方式吧。
添加依赖
- 1
- 2
- 1
- 2
这个根据自己SDK的版本号进行选择。
RecylerView的初始化
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
这里采用GridLayoutManager布局管理器,分三列。
数据填充
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
这里是很有意思的地方,大家可以看出来集合里包含了两种不同类型的数据,ItemModel.ONE,ItemModel.TWO,通过不同的数据类型,我们可以选用不同的布局
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
这里对不同的viewType,采用不同的ViewHolder,这里是重点,大家揣摩一下。
adapter布局则是一个TextView,跟EditText。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
然后如何实现点击选中状态呢?这需要看我们的Selecor啦
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
这里可以看出,对于不同的select,设置对应的shape,就能轻松实现选中效果。
那么如何实现只能单选的功能呢?因为我们充值只能选择一种金额。
这里我们需要分析一下。我们在点击一种金额,需要取消其他金额的选中状态。该怎么实现呢?
我们需要设置一个过去选中的位置(int),记为lastSelectIndex,暂且设置为-1.
- 1
- 1
获取当前选中的位置
- 1
- 1
当我们再选中时,需要进行判断,当lastPressIndex==position时,就是双击取消选中状态,将lastPressIndex设置为-1.反之,将lastPressIndex==position。
很好理解吧,因为集合从0开始,设置完之后,我们需要
- 1
- 1
没错,这句话很重要,如果不刷新的话,下面的viewholder就不会重新赋值。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
根据lastPressIndex改变select的状态。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
嗯关键点就这么哆啦。效果图
这里主要解释实现的难点,重点,就不一一贴代码啦。
另外在可能有人会问,当我点击充值的时候如何将选中状态的值从adapter传过来呢?
这里我就分析一下实现方法。
1,用广播的方式,选中的时候就发送广播,在主页面进行接收即可
2,用eventBus来实现传值。详情可以看我的博客
使用EvnetBus进行消息传递解析
使用EventBus进行数据传递解析
就这么多啦,附上代码下载链接
http://pan.baidu.com/s/1nvpeorR
- Android学习之RecylerView实习仿支付宝充值界面
- Android学习之RecylerView实习仿支付宝充值界面
- Android基础学习之RecylerView学习
- Android学习笔记(八)--CoordinatorLayout的应用-仿支付宝界面
- Android学习之RecylerView完美实现瀑布流效果
- Android学习之RecylerView完美实现瀑布流效果
- Android高级学习之RecylerView和ListView的区别
- (转)Android高级学习之RecylerView和ListView的区别
- Android学习之ActionBar(仿Gmail主界面)
- Android学习之仿QQ聊天界面的实现
- Android学习笔记之 仿QQ登录界面的实现
- [学习笔记-Android]仿课程格子界面
- Android RecylerView之万能适配器的实现
- Android学习之ItemTouchHelper实现RecylerView的拖拽以及滑动删除功能
- Android学习之ItemTouchHelper实现RecylerView的拖拽以及滑动删除功能
- Android学习笔记-自定义仿支付宝ProgressBar动画
- Android自定义view之仿支付宝芝麻信用仪表盘
- 仿支付宝输入密码界面
- 原来Github上的README.md文件这么有意思——Markdown语言详解
- java的动态代理机制详解
- 生产者消费者模型
- HyperLogLog算法
- 【C#串口编程计划】如何避免关闭串口时软件死锁
- Android学习之RecylerView实习仿支付宝充值界面
- mysql——触发器
- 【Mybatis】深入浅出Mybatis(五)——入门程序(增删改)
- 最大连续数列的和
- iframe自适应高度和宽度 全css实现无javascript
- 【官方教程】使用Quick-Cocos2d-x搭建一个横版过关游戏(二)
- 将数据库复制到scard
- LeetCode
- dubbo协议下的单一长连接与多线程并发如何协同工作