Android可上下左右滑动的列表
前言:
最开始使用的HorizontalScrollView和ListView当数据量上去之后发现有些低性能的手机变得卡顿,手机屏幕刷新会黑屏(黑平的时候我都惊呆了)
实现
废话不多说了接下来实现功能,处于考虑我决定使用RecyclerView然后让他横向滑动并且让他们同步这样横向滑动就解决了,然后竖着滑动使用ScrollView,这就是我的思路。
RecyclerView Adapter 因为这里的item资源复用,渲染界面一定要仔细,不然一个界面变了会影响其他复用的界面
1.测试bean
public class Bean {private String color;private String name;public String getColor() {return color;}public void setColor(String color) {this.color = color;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Bean() {}
}
2.界面布局
主activity
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ScrollViewandroid:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:id="@+id/box"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"></LinearLayout></ScrollView></androidx.constraintlayout.widget.ConstraintLayout>
RecyclerView item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutandroid:id="@+id/lay_item_auto_check_device"xmlns:android="http://schemas.android.com/apk/res/android"xmlns:custom="http://schemas.android.com/apk/res-auto"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"><LinearLayoutandroid:layout_width="80dp"android:layout_height="70dp"android:background="@drawable/item_bg"android:layout_margin="5dp"android:gravity="center"android:orientation="vertical"><LinearLayoutandroid:id="@+id/item_background"android:layout_width="60dp"android:layout_height="55dp"android:background="#e6e6e6"android:orientation="vertical"><TextViewandroid:id="@+id/item_textview"android:layout_width="60dp"android:layout_height="35dp"android:gravity="center"android:focusable="true"android:focusableInTouchMode="false"android:textColor="#ffffff"android:textStyle="bold"android:textSize="20dp"/></LinearLayout></LinearLayout></LinearLayout>
3.适配器
import java.util.List;public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {private List<Bean> list;public Adapter(List<Bean> list) {this.list = list;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);ViewHolder holder = new ViewHolder(view);return holder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {Bean bean = list.get(position);holder.lay.setBackgroundColor(Color.parseColor(bean.getColor()));holder.tv.setText(bean.getName());}@Overridepublic int getItemCount() {return list.size();}public class ViewHolder extends RecyclerView.ViewHolder {LinearLayout lay;TextView tv;public ViewHolder(@NonNull View itemView) {super(itemView);lay = itemView.findViewById(R.id.item_background);tv = itemView.findViewById(R.id.item_textview);}}
}
4.avtivity 代码
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//1.获取控件LinearLayout boxView = findViewById(R.id.box);//2.生成模拟数据List<Bean> list = new ArrayList<>();for (int i = 0; i < 100; i++) {Bean bean = new Bean();bean.setName("TNT" + i);switch (i % 10) {case 0:bean.setColor("#ffbd21");break;case 1:bean.setColor("#99cc00");break;case 2:bean.setColor("#ff002a");break;case 3:bean.setColor("#57C5E8");break;case 4:bean.setColor("#B0B0B0");break;case 5:bean.setColor("#59B29C");break;case 6:bean.setColor("#ff6b29");break;case 7:bean.setColor("#00a0e9");break;case 8:bean.setColor("#f0f66e");break;case 9:bean.setColor("#FFA4A9");break;}list.add(bean);}//3.根据数据生成界面final List<RecyclerView> syncRecyclerViews = new ArrayList<>();for (int i = 0; i < 10; i++) {RecyclerView syncRecyclerView = new RecyclerView(this);Adapter adapter = new Adapter(list);LinearLayoutManager ms = new LinearLayoutManager(this);ms.setOrientation(LinearLayoutManager.HORIZONTAL);syncRecyclerView.setLayoutManager(ms);syncRecyclerView.setAdapter(adapter);syncRecyclerViews.add(syncRecyclerView);syncRecyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);//取消边缘波浪样式boxView.addView(syncRecyclerView);//添加监听,使所有的RecyclerView保持同步RecyclerView.OnScrollListener listener = new RecyclerView.OnScrollListener() {@Overridepublic void onScrolled(RecyclerView recyclerView, int dx, int dy) {for (RecyclerView item : syncRecyclerViews) {if (recyclerView == item) {continue;}item.clearOnScrollListeners();item.scrollBy(dx, dy);item.addOnScrollListener(this);}}};syncRecyclerView.addOnScrollListener(listener);}}
}
最后奉上github地址
https://github.com/1142235090/android-table-slide
Android可上下左右滑动的列表相关推荐
- Android手势识别——上下左右滑动、屏幕上下左右中区域处理
手势识别GestureDetector 关于手势识别是Android为了方便开发人员处理屏幕上的触摸.拖动.单双击.滑动等提供的一组接口.用这个我们可以很方便的在屏幕上做出想要的效果,比如滑动翻页.触 ...
- android 可以上下左右滑动的界面布局
1.我使用的是ScrollView嵌套HorizontalScrollView让ScrollView负责上下滑动HorizontalScrollView负责左右滑动 2.以下代码提供了思路和完成手段, ...
- Android上下左右滑动,显示底层布局
转载博客地址:http://www.cnblogs.com/flyme2012/p/4106308.html 闲着没事做了一个小东西.Android的上下左右滑动,显示底层布局.可以做类似于QQ消息列 ...
- Android 可滑动表格的简单实现(类似于excel表格,支持上下左右滑动)
前言 最近遇到一个需求,以表格的形式模拟样本盒的显示,最初设想是利用RecyclerView网格形式实现,然而需求是盒子行列数目不固定,可能存在手机屏幕一屏显示不下的情况,因此需要做成可以上下左右滑动 ...
- Android学习系列(10)--App列表之拖拽ListView(上)
研究了很久的拖拽ListView的实现,受益良多,特此与尔共飨. 鉴于这部分内容网上的资料少而简陋,而具体的实现过程或许对大家才有帮助,为了详尽而不失真,我们一步一步分析,分成两篇文章. ...
- 安卓APP_ 控件(10)—— ListView可上下滑动的列表(重要)与ViewHolder优化
摘自:安卓APP_ 控件(10)-- ListView可上下滑动的列表(重要)与ViewHolder优化 作者:丶PURSUING 发布时间: 2021-04-12 23:28:27 网址:https ...
- Android学习系列(15)--App列表之游标ListView(索引ListView)
游标ListView,提供索引标签,使用户能够快速定位列表项. 也可以叫索引ListView,有的人称也为Tweaked ListView,可能更形象些吧. 一看图啥都懂了: ...
- Android学习系列(11)--App列表之拖拽ListView(下)
接着上篇Android学习系列(10)--App列表之拖拽ListView(上)我们继续实现ListView的拖拽效果. 7.重写onTouchEvent()方法. 在这个方法中我们主要是处 ...
- rn 实现上下滑动选择列表_RN-实现抖音切换视频效果
实现效果 1.上下滑动切换 2. 左滑动弹出列表,右滑动取消列表 3.加载更多.刷新 实现效果 思路 通过滑动的x.y判断是上下滑动还是左右滑动 1.上下滑动 滑动中:通过 flatList.scro ...
最新文章
- 深入浅出Spring Security(一):三句话解释框架原理
- 轻松学MVC4.0–4 扩展UserProfile
- 贝叶斯统计:信噪对偶与Dawid定理
- 诺基亚塞班系列最强回顾(搬运整理)
- Android开发工具之Android Studio---版本控制SVN使用三(常规操作)
- linux实例 批量修改图片文件名
- 用python数据分析excel多地天气_Python实现天气查询功能(外加Excel技巧)
- Layui导航、面包屑
- 手机用久了很卡怎么办?
- java miniui datagrid_miniui datagrid 的客户端分页解决方案
- MySQL数据常用命令
- 人脸方向学习(十六):Face Detection-BlazeFace解读
- pku 1459 最大流 SAP
- qtp 连接mysql_QTP连接mysql数据库
- Qt实战-简单的点名程序和抽奖程序
- 不用找,你想要的凹凸贴图素材都在这里
- [2014]兄弟连高洛峰 php教程5.5.1,2014PHP兄弟连全套教程
- html5朋友圈评论代码,微信朋友圈评论隐藏文字,超级好玩
- Lock接口和AQS原理与实现(Java并发编程的艺术整理)
- HTTP请求头及其作用