博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
水平方向的RecyclerView
阅读量:6679 次
发布时间:2019-06-25

本文共 4655 字,大约阅读时间需要 15 分钟。

  最近做了一个项目需要实现一个卡片式的水平滑动,但是不能手势滑动,点击卡片上的按钮之后滑动到下一个卡片,所以想到用RecyclerView实现,去掉它的手势滑动,点击按钮之后再代码控制滑动到下一个卡片。

接下来就是一步一步的实现。

1.引入RecyclerView。

compile'com.android.support:recyclerview-v7:25.+'

2.在布局文件中使用RecyclerView。

3.创建RecyclerView的item布局文件。

4.实现RecyclerViewAdapter。

public class RecyclerViewAdapter extends RecyclerView.Adapter
{ private static final String TAG = RecyclerViewAdapter.class.getSimpleName(); private List
dataList; private Context mContext; private RecyclerView recyclerView; public RecyclerViewAdapter(Context context, List
dataList) { mContext = context; this.dataList = dataList; } @Override public RecyclerHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.recycler_item_view, parent, false); RecyclerHolder holder = new RecyclerHolder(view); return holder; } @Override public void onBindViewHolder(RecyclerHolder holder, final int position) { holder.textView.setText(dataList.get(position)); if (position == dataList.size() - 1) { holder.button.setVisibility(View.GONE); } holder.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { recyclerView.smoothScrollToPosition(position + 1); } }); } @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); this.recyclerView = recyclerView; } @Override public int getItemCount() { return dataList.size(); } public class RecyclerHolder extends RecyclerView.ViewHolder { TextView textView; Button button; public RecyclerHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.item_text); button = (Button) itemView.findViewById(R.id.item_button); } }}

5.在activity文件中设置RecyclerView。

private RecyclerView recyclerView;    private LinearLayoutManager mRecyclerViewLayoutManager;    private RecyclerViewAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        recyclerView = (RecyclerView) findViewById(R.id.recycler);        List
datas = new ArrayList<>(); datas.add("LiMing"); datas.add("XiaoMing"); datas.add("HanMeiMei"); mRecyclerViewLayoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(mRecyclerViewLayoutManager); adapter = new RecyclerViewAdapter(this, datas); recyclerView.setAdapter(adapter); }

6.设置RecyclerView为水平方向。

mRecyclerViewLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

7.禁止手势滑动。

recyclerView.setOnTouchListener(new View.OnTouchListener() {    @Override         public boolean onTouch(View v, MotionEvent event) {              return true;         }});

但是这样是有一个问题的,在item滑动的时候点击一下,item就会暂停住,不再滑动。

这个时候就需要处理一下这个问题,在item滑动的过程,不拦截点击事件,不滑动的时候拦截点击事件。

//position是RecyclerView的item的编号。    recyclerView.setOnTouchListener(new View.OnTouchListener() {         @Override         public boolean onTouch(View v, MotionEvent event) {              Log.d(TAG,"position = "+RecyclerViewAdapter.position);              if (isScroll) {                   recyclerView.smoothScrollToPosition(RecyclerViewAdapter.position);                   return false;              } else {                   return true;               }         }    });    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {         @Override         public void onScrollStateChanged(RecyclerView recyclerView, int newState) {              super.onScrollStateChanged(recyclerView, newState);              if (newState == 2) {                   isScroll = false;              }              if (newState == 1) {                   isScroll = true;              }              if (newState == 0) {                   isScroll = false;              }         }         @Override         public void onScrolled(RecyclerView recyclerView, int dx, int dy) {              super.onScrolled(recyclerView, dx, dy);         }    });        @Override    protected void onDestroy() {        Log.d(TAG,"onDestroy()");        position = 0;        super.onDestroy();    }

 

项目的完整代码地址:https://github.com/ZhangMiao147/HorizontalRecyclerView

 

转载于:https://www.cnblogs.com/zhangmiao14/p/7016173.html

你可能感兴趣的文章
RHEL7 Connection closed by foreign host.
查看>>
Nodejs开发框架之Loopback介绍
查看>>
微信小程序下拉刷新使用整理
查看>>
ubuntu12.04禁用客人会话
查看>>
我的友情链接
查看>>
JVM垃圾收集器与内存分配策略
查看>>
分析Linux 文件系统访问控制列表
查看>>
Confluence WIKI 安装、破解及添加汉化包(Windows)
查看>>
一起入门Citrix_XenDesktop7系列 二-- 跟着图片通过XenDesktop7交付(发布)应用与共享桌面...
查看>>
MyBatis学习手记(一)MaBatis入门
查看>>
SCTF-2014 writeup(部分)
查看>>
Elasticsearch 连接查询
查看>>
Retrofit入门
查看>>
设置Exchange 通讯组接收外部组织邮件
查看>>
观点:正在消逝的运维江湖
查看>>
istio 监控,遥测 (理论)
查看>>
Oracle insert 多条记录
查看>>
Python学习-baseNo.2
查看>>
spring data mongo 复合索引
查看>>
修改Windows Server 2008远程桌面连接端口
查看>>