最近有个同事找我,问我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 签到打卡效果相关推荐

  1. Android 签到打卡日历,自定义日期可带图标(附源码)

    前言 公司项目需要做一个签到送积分的系统,要求app实现这种签到功能.先在网上找了一些资料,有些用自定义View画图实现,其实对于普通码农对绘图会没耐心看各自算法.所以自己动手撸一个通用型日历,使用V ...

  2. Android自定义实现按周签到打卡功能

    之前实现过<Android可签到的日历控件>的功能,跟这篇一样都是实现签到打卡功能,这篇实现的是按月进行打卡做标识,本篇内容实现的按周进行签到打卡. 实现签到规则如下: 1.连续签到7天, ...

  3. Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 很久以前也过一个html5的刮刮卡 ...

  4. Android自定义实现刮刮卡效果

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 很久以前也过一个html5的刮刮卡 ...

  5. 扫描二维码和签到打卡应用程序

    扫描二维码和签到打卡应用程序 项目简介 完整的二维码扫描功能 漂亮的界面 查询数据库功能 写入到本地文件在本地文件中手动创建txt文件 打卡功能实现 集成扫描二维码功能 我的做法和大多数朋友有点区别, ...

  6. android浏览SD卡的文件,简单实现浏览Android SD卡中的文件

    ----Main.java public class Main extends Activity { private TextView textView; private Button button; ...

  7. Android中app卡顿原因分析示例

    http://www.cnblogs.com/zhucai/p/weibo-graphics-performance-analyse.html 朱才 专注于Android图形动画 MIUI工程师 博客 ...

  8. php 微信小程序签到打卡,微信小程序实现打卡日历功能

    生活中有各种可以打卡的app,例如背单词打卡什么的,本人觉得很有意思,于是本人在大二时做了一款诚信状打卡的微信小程序,这里讲述一下编写的过程. 先说一下开发环境:用的是微信web开发工具开发的,后台采 ...

  9. 小程序之定位签到打卡=>腾讯地图SDK

    说明:文章部分内容及图片出自网络,如有侵权请与我本人联系(主页有公众号:小攻城狮学前端) 作者:小只前端攻城狮. 主页:小只前端攻城狮. 首发:掘金 GitHub:P-J27. CSDN:PJ想做前端 ...

最新文章

  1. 第十六届全国大学生智能车东北赛区线上比赛时间与直播信息
  2. Django的model.py
  3. 有微型计算机广告,广告还会受欢迎?都是斯巴达克显卡惹的“祸”
  4. sync是同步还是非同步_音视频是怎么保持同步的?(四)
  5. npm安装iViewUI框架 - cmd篇
  6. CSS--背景样式---伪类选择器---高级选择器---盒子模型---浮动
  7. Java、Android、oc冒泡排序算法随笔
  8. python递归求13的n次方_Python题目:递归的简单题目,求阶乘,求n-m的累积和,求斐波那契...
  9. MyCat分布式数据库集群架构工作笔记0021---高可用_单表存储千万级_海量存储_水平分表全局表
  10. pytorch中IndexError: too many indices for tensor of dimension 0问题解释
  11. C++ const型成员函数与 non-const型成员函数 (二)
  12. 《麦肯锡方法》第8章 展开访谈-思维导图
  13. POJO、PO、DTO、DAO、BO、VO需要搞清楚的概念
  14. 西安交大计算机系96年录取分数,西安交通大学2018年各省录取分数线
  15. Quartus 软内核NIOS II 入门指导
  16. javaweb 温习
  17. Where are Docker images stored? (杂译)
  18. Polestar美股上市:5.5万台交付如何支持得起超200亿美元估值
  19. android21是什么手机,三星S21成安卓新王者?详细对比发现,OPPO小米才是真厚道...
  20. linux下sv高亮设置的详细教程

热门文章

  1. 分时系统用户可以独占计算机资源,资源共享分时系统
  2. APP被苹果 App Store拒之门外的79个原因!
  3. QT: 基于QT和嵌入式的视频监控系统
  4. Android关于Firebase集成及示例及用法(开发反编译)
  5. Sandboxie沙盘,代码开源可下载!
  6. Win10 基于Docker使用tensorflow serving部署模型
  7. 【论文阅读】RoadMap: A Light-Weight Semantic Map for Visual Localization towards Autonomous Driving
  8. 什么是业务流程管理BPM
  9. 美国名校的网上竞争雷人语录
  10. java基础国庆作业_0715于昊-国庆作业.md