Android实现获奖名单滚动效果
龙旋
共 2774字,需浏览 6分钟
· 2021-03-01
最近公司项目需要一个展示获奖名单的效果,做完之后在此分享出来。
效果展示
思路分析
获奖名单是一个无限滚动的效果,因此我们可以想到通过使用RecyclerView来加载无限的条目,然后通过不断的自动向下滑动RecyclerView来实现这个效果,但是获奖名单不能手动滑动因此我们需要将其滑动功能屏蔽掉。
实现禁止滑动的RecyclerView
public class MyRecyclerView extends RecyclerView {
public MyRecyclerView(Context context) {
this(context,null);
}
public MyRecyclerView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public MyRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
//禁止手动滑动
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return true;
}
}
Adapter编写(实现加载无限重复数据的关键)
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
//这里的WinnListBean是我模拟的中奖数据
private List<WinnListBean> mDatas;
private Context mContext;
public MyAdapter(List<WinnListBean> mDatas, Context mContext) {
this.mDatas = mDatas;
this.mContext = mContext;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(mContext).inflate(R.layout.item_winnlist,null,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
WinnListBean winnListBean = mDatas.get(i % mDatas.size());//获取重复数据
myViewHolder.itemWinnlistTvPhone.setText(winnListBean.getPhone());
myViewHolder.itemWinnlistTvPrize.setText(winnListBean.getPrize());
}
@Override
public int getItemCount() {
// 本案例一页最多显示6条数据,因此设置如果数据数量大于6等于6才开始滚动
if(mDatas.size()>5){
// 展示无限数据
return Integer.MAX_VALUE;
}else {
return mDatas.size();
}
}
static class MyViewHolder extends RecyclerView.ViewHolder{
private TextView itemWinnlistTvPhone;
private TextView itemWinnlistTvPrize;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
itemWinnlistTvPhone = (TextView) itemView.findViewById(R.id.item_winnlist_tv_phone);
itemWinnlistTvPrize = (TextView) itemView.findViewById(R.id.item_winnlist_tv_prize);
}
}
}
实现自动滚动
这里的自动滚动是使用的RecyclerView的smoothScrollBy()方法结合Handler来实现的。
mHandler=new Handler();
mRunnable = new Runnable() {
@Override
public void run() {
//RecyclerView每隔200毫秒向下滚动一次
mRecyclerView.smoothScrollBy(0,5);
mHandler.postDelayed(this,200);
}
};
mHandler.post(mRunnable);
源码地址:
https://gitee.com/itfitness/WinnListDemo
到这里就结束啦
评论
三个优秀的PyTorch实现语义分割框架
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达转自 | 机器学习AI算法工程使用的VOC数据集链接开放在文章中,预训练模型已上传Github,环境我使用Colab pro,大家下载模型做预测即可。代码链接: https://github.com/lixiang007
小白学视觉
0
15种时间序列预测方法总结(包含多种方法代码实现)
向AI转型的程序员都关注了这个号👇👇👇在这篇文章中,我们将深入探讨时间序列预测的基本概念和方法。我们将首先介绍单元预测和多元预测的概念,然后详细介绍各种深度学习和传统机器学习方法如何应用于时间序列预测,包括循环神经网络(RNN)、一维卷积神经网络(1D-CNN)、Transformer、自回归模型(
机器学习AI算法工程
0
SpringBoot 实现图片防盗链功能
程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 4 分钟。来自:blog.csdn.net/weixin_46157208/article/details/138051737前言出于安全考虑,我们需要后端返回的图片只允许在某个网站内展示,不想被爬虫拿到图片地
程序员的成长之路
0
一站式解决方案:基于 Arthas 实现服务发现和权限控制
来源:juejin.cn/post/7281849496983994383👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接
小哈学Java
0
用 Shader 实现旗帜飘扬动画效果
我觉得对于刚入门 3D 编程的朋友来说,如果能够完成代码创建模型数据->创建材质->编写Shader动画这一系列,想必会有满满的成就感。今天就用 Cocos Creator 的 utils.MeshUtils.createMesh 接口,带大家感受一下这个流程。这个流程不仅可以用于新手学
COCOS
2
SpringBoot+Minio实现上传凭证、分片上传、秒传和断点续传
关注我们,设为星标,每天7:40不见不散,架构路上与您共享回复架构师获取资源大家好,我是你们的朋友架构君,一个会写代码吟诗的架构师。Spring Boot整合Minio后,前端的文件上传有两种方式:1、文件上传到后端,由后端保存到Minio这种方式好处是完全由后端集中管理,可以很好的做到、身份验证、
Java架构师社区
0
超越原生,散点图实现华夫饼图
之前我们介绍过了如何使用新卡片图实现华夫饼图。参考:超越原生,PowerBI 华夫饼图实现但是利用卡片图实现的华夫饼图有一些缺点,形状之间的大小跟间距不太好把握,而且有时形状大一点的话显示就会不正常,需要做出二次调整。今天给大家介绍一种原生视觉对象生成华夫饼图的更佳方案,既简单又美观。上图是利用散点
PowerBI战友联盟
2
全新 SOTA backbone | 2024年了,再见ViT系列Backbone,实数难得,不知道效果如何?
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达在构建用于精确匹配的深度固定长度表示时,确定指纹上的密集特征点,特别是在像素 Level 上,具有重大意义。为了探索指纹匹配的可解释性,作者提出了一种多阶段可解释的指纹匹配网络,名为通过视觉 Transformer 进行指纹匹配的
小白学视觉
10