Android进阶之路 - RecyclerView实现横、纵向滑动列表

说来惭愧,在这么久的开发中一直很少使用到横向的列表效果,即使有类似场景也是使用了 ViewPager处理,特此在有时间的基础下给新人写个入门的dome玩玩 ~

Effect ~
在这里插入图片描述

众所周知,RecyclerView的使用中我们会设置布局管理者,所以此篇的关键,在于LinearLayoutManager 的设置方向,关键代码如下 ~

 LinearLayoutManager layoutManager= new LinearLayoutManager(this);
 //这行是关键,设置了布局方向,如未设置HORIZONTAL方向,则默认是垂直状态
 layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
 mRv.setLayoutManager(hLayoutManager);

越来越懒了,这里我用的适配器是在目前项目中使用的 BaseQuickAdapter ~

build(project)

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

build(app)

  implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.35'
  implementation 'com.android.support:recyclerview-v7:27.1.1'

MainActivity

package nkwl.com.crosswisedemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;

import com.chad.library.adapter.base.BaseQuickAdapter;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView mRvH = findViewById(R.id.rv_horizontal);
        RecyclerView mRvV = findViewById(R.id.rv_vertical);

        //模拟数据
        List dataList = new ArrayList<Integer>();
        dataList.add(R.mipmap.scenery);
        dataList.add(R.mipmap.scenery);
        dataList.add(R.mipmap.scenery);
        dataList.add(R.mipmap.scenery);
        dataList.add(R.mipmap.scenery);
        dataList.add(R.mipmap.scenery);
        dataList.add(R.mipmap.scenery);

        //横向
        MyAdapter horizontalAdapter = new MyAdapter(R.layout.item_layout, dataList);
        LinearLayoutManager hLayoutManager = new LinearLayoutManager(this);
        hLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        mRvH.setLayoutManager(hLayoutManager);
        mRvH.setAdapter(horizontalAdapter);
        horizontalAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                Toast.makeText(MainActivity.this, "横向 - 当前角标:" + position, Toast.LENGTH_SHORT).show();
            }
        });

        //竖向
        MyAdapter verticalAdapter = new MyAdapter(R.layout.item_layout, dataList);
        LinearLayoutManager vLayoutManager = new LinearLayoutManager(this);
        vLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mRvV.setLayoutManager(vLayoutManager);
        mRvV.setAdapter(verticalAdapter);
        verticalAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                Toast.makeText(MainActivity.this, "竖向 - 当前角标:" + position, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:background="#225"
        android:layout_width="match_parent"
        android:id="@+id/rv_horizontal"
        android:layout_height="wrap_content"/>

    <android.support.v7.widget.RecyclerView
        android:background="#255"
        android:layout_width="match_parent"
        android:id="@+id/rv_vertical"
        android:layout_height="match_parent"/>

</LinearLayout>

MyAdapter

package nkwl.com.crosswisedemo;

import android.support.annotation.Nullable;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;

import java.util.List;

/**
 * @author MrLiu
 * @date 2019/11/26
 * desc
 */
public class MyAdapter extends BaseQuickAdapter<Integer,BaseViewHolder> {

    public MyAdapter(int layoutResId, @Nullable List data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, Integer item) {
        helper.setImageResource(R.id.item_img,item);
    }
}

item_layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:layout_margin="5dp"
        android:scaleType="fitXY"
        android:id="@+id/item_img"
        android:layout_width="130dp"
        android:src="@mipmap/scenery"
        android:layout_height="130dp" />

</RelativeLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远方那座山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值