▲ Android 签到打卡效果
最近有个同事找我,问我17年的时候,项目那个效果能不能发给他。。。没错是17年的效果。
效果如下
可以有多个签到,但是签退只有一次。然后签退之后 进行下一次的签到,签退的过程。
可能有朋友说这有何难?这不就是两个RecycleView 嵌套嘛。其实这个效果的难点就是签到与签退的竖线,会随着签到的item的数量增加而变长。
这里就需要不断的测量,随着item的数量的增加测量出那条竖线View该显示的长度。
核心代码
holder.mRecyclerViewSign.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {View childAt = layoutManager.getChildAt(Indexes - layoutManager.findFirstVisibleItemPosition());if (childAt != null) {height = childAt.getHeight();}int x = height * signInTime.size();ViewGroup.LayoutParams params = holder.mView.getLayoutParams();params.height = x;holder.mView.setLayoutParams(params);}});
============================= 全部代码如下 =====================================================
public class SignTimeAdapter extends RecyclerView.Adapter<SignTimeAdapter.ViewHolderX> {private Context mContext;private List<HashMap> mlist;int height = 0;public SignTimeAdapter(Context cxt, List<HashMap> list) {this.mContext = cxt;this.mlist = list;}@Overridepublic ViewHolderX onCreateViewHolder(ViewGroup parent, int viewType) {View inflate = LayoutInflater.from(mContext).inflate(R.layout.item_sign_recycler_list, parent, false);ViewHolderX viewHoldX = new ViewHolderX(inflate);return viewHoldX;}@Overridepublic void onBindViewHolder(final ViewHolderX holder, int position) {final int Indexes = position;HashMap hashMap = mlist.get(position);List<String> signOutTime = (List<String>) hashMap.get("SignOutTime");Log.e("XX1", signOutTime.size()+"===");if (signOutTime.size() == 0) {holder.mTvSingClose.setText("");holder.mViewX.setVisibility(View.GONE);holder.mTimeClock.setVisibility(View.GONE);holder.imgSignOut.setVisibility(View.GONE);holder.tvSingOut.setVisibility(View.GONE);} else {holder.mViewX.setVisibility(View.VISIBLE);holder.mTimeClock.setVisibility(View.VISIBLE);holder.imgSignOut.setVisibility(View.VISIBLE);holder.tvSingOut.setVisibility(View.VISIBLE);holder.mTvSingClose.setText(signOutTime.get(0));}final LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);holder.mRecyclerViewSign.setLayoutManager(layoutManager);List<String> strings = (List<String>) hashMap.get("SignInTime");;List<String> signInTime = new ArrayList<>();signInTime.addAll(strings);SignTimeItemAdapter signTimeItemAdapter = new SignTimeItemAdapter(mContext, signInTime);holder.mRecyclerViewSign.setAdapter(signTimeItemAdapter);holder.mRecyclerViewSign.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {View childAt = layoutManager.getChildAt(Indexes - layoutManager.findFirstVisibleItemPosition());if (childAt != null) {height = childAt.getHeight();}int x = height * signInTime.size();ViewGroup.LayoutParams params = holder.mView.getLayoutParams();params.height = x;holder.mView.setLayoutParams(params);}});}@Overridepublic int getItemCount() {return mlist == null ? 0 : mlist.size();}class ViewHolderX extends RecyclerView.ViewHolder {RecyclerView mRecyclerViewSign;View mView, mViewX;TextView mTvSingClose, tvSingOut;ImageView mTimeClock, imgSignOut;public ViewHolderX(View itemView) {super(itemView);mRecyclerViewSign = (RecyclerView) itemView.findViewById(R.id.recycler_view);mView = itemView.findViewById(R.id.view1);mViewX = itemView.findViewById(R.id.view2);mTvSingClose = (TextView) itemView.findViewById(R.id.tv_sing_close);mTimeClock = (ImageView) itemView.findViewById(R.id.time_clock);imgSignOut = (ImageView) itemView.findViewById(R.id.img_Sign_out);tvSingOut = (TextView) itemView.findViewById(R.id.tv_sing_out);}}
}
public class SignTimeItemAdapter extends RecyclerView.Adapter<SignTimeItemAdapter.ViewHoldX> {private List<String> mList;private Context mContext;public SignTimeItemAdapter(Context cxt, List<String> list) {this.mContext = cxt;this.mList = list;}@Overridepublic ViewHoldX onCreateViewHolder(ViewGroup parent, int viewType) {View inflate = LayoutInflater.from(mContext).inflate(R.layout.item_sign_x, parent, false);ViewHoldX viewHoldX = new ViewHoldX(inflate);return viewHoldX;}@Overridepublic void onBindViewHolder(ViewHoldX holder, int position) {holder.tv_sing_on.setText(mList.get(position));}@Overridepublic int getItemCount() {return mList == null ? 0 : mList.size();}class ViewHoldX extends RecyclerView.ViewHolder {TextView tv_sing_on;public ViewHoldX(View itemView) {super(itemView);tv_sing_on = (TextView) itemView.findViewById(R.id.tv_sing_on);}}
}
源码地址
▲ Android 签到打卡效果相关推荐
- Android 签到打卡日历,自定义日期可带图标(附源码)
前言 公司项目需要做一个签到送积分的系统,要求app实现这种签到功能.先在网上找了一些资料,有些用自定义View画图实现,其实对于普通码农对绘图会没耐心看各自算法.所以自己动手撸一个通用型日历,使用V ...
- Android自定义实现按周签到打卡功能
之前实现过<Android可签到的日历控件>的功能,跟这篇一样都是实现签到打卡功能,这篇实现的是按月进行打卡做标识,本篇内容实现的按周进行签到打卡. 实现签到规则如下: 1.连续签到7天, ...
- Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 很久以前也过一个html5的刮刮卡 ...
- Android自定义实现刮刮卡效果
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 很久以前也过一个html5的刮刮卡 ...
- 扫描二维码和签到打卡应用程序
扫描二维码和签到打卡应用程序 项目简介 完整的二维码扫描功能 漂亮的界面 查询数据库功能 写入到本地文件在本地文件中手动创建txt文件 打卡功能实现 集成扫描二维码功能 我的做法和大多数朋友有点区别, ...
- android浏览SD卡的文件,简单实现浏览Android SD卡中的文件
----Main.java public class Main extends Activity { private TextView textView; private Button button; ...
- Android中app卡顿原因分析示例
http://www.cnblogs.com/zhucai/p/weibo-graphics-performance-analyse.html 朱才 专注于Android图形动画 MIUI工程师 博客 ...
- php 微信小程序签到打卡,微信小程序实现打卡日历功能
生活中有各种可以打卡的app,例如背单词打卡什么的,本人觉得很有意思,于是本人在大二时做了一款诚信状打卡的微信小程序,这里讲述一下编写的过程. 先说一下开发环境:用的是微信web开发工具开发的,后台采 ...
- 小程序之定位签到打卡=>腾讯地图SDK
说明:文章部分内容及图片出自网络,如有侵权请与我本人联系(主页有公众号:小攻城狮学前端) 作者:小只前端攻城狮. 主页:小只前端攻城狮. 首发:掘金 GitHub:P-J27. CSDN:PJ想做前端 ...
最新文章
- 第十六届全国大学生智能车东北赛区线上比赛时间与直播信息
- Django的model.py
- 有微型计算机广告,广告还会受欢迎?都是斯巴达克显卡惹的“祸”
- sync是同步还是非同步_音视频是怎么保持同步的?(四)
- npm安装iViewUI框架 - cmd篇
- CSS--背景样式---伪类选择器---高级选择器---盒子模型---浮动
- Java、Android、oc冒泡排序算法随笔
- python递归求13的n次方_Python题目:递归的简单题目,求阶乘,求n-m的累积和,求斐波那契...
- MyCat分布式数据库集群架构工作笔记0021---高可用_单表存储千万级_海量存储_水平分表全局表
- pytorch中IndexError: too many indices for tensor of dimension 0问题解释
- C++ const型成员函数与 non-const型成员函数 (二)
- 《麦肯锡方法》第8章 展开访谈-思维导图
- POJO、PO、DTO、DAO、BO、VO需要搞清楚的概念
- 西安交大计算机系96年录取分数,西安交通大学2018年各省录取分数线
- Quartus 软内核NIOS II 入门指导
- javaweb 温习
- Where are Docker images stored? (杂译)
- Polestar美股上市:5.5万台交付如何支持得起超200亿美元估值
- android21是什么手机,三星S21成安卓新王者?详细对比发现,OPPO小米才是真厚道...
- linux下sv高亮设置的详细教程
热门文章
- 分时系统用户可以独占计算机资源,资源共享分时系统
- APP被苹果 App Store拒之门外的79个原因!
- QT: 基于QT和嵌入式的视频监控系统
- Android关于Firebase集成及示例及用法(开发反编译)
- Sandboxie沙盘,代码开源可下载!
- Win10 基于Docker使用tensorflow serving部署模型
- 【论文阅读】RoadMap: A Light-Weight Semantic Map for Visual Localization towards Autonomous Driving
- 什么是业务流程管理BPM
- 美国名校的网上竞争雷人语录
- java基础国庆作业_0715于昊-国庆作业.md