Android之RecyclerView仿ViewPage滑动

这篇具有很好参考价值的文章主要介绍了Android之RecyclerView仿ViewPage滑动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

我们都知道ViewPage+Fragment滑动,但是的需求里面已经有了这玩意,但是在Fragment中还要有类似功能,这时我相信很多人就苦恼了,没事,这张来解决,用RecyclerView去实现即可,而且还带指示器。


一、效果图

这里我没有弄GIF,反正效果和ViewPage+Fragment是一样的。
Android之RecyclerView仿ViewPage滑动,RecyclerView滑动,仿ViewPage滑动,ViewPage滑动

二、实现步骤

1.xml主布局

代码如下(示例):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f8f8f8"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/relat_title"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:background="#ffffff">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="15dp"
            android:text="Machine"
            android:textColor="#232323"
            android:textSize="20dp"
            android:textStyle="bold" />
    </RelativeLayout>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/rel_bt"
        android:layout_below="@+id/relat_title"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="15dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="15dp" />

    <RelativeLayout
        android:id="@+id/rel_bt"
        android:layout_width="match_parent"
        android:layout_height="140dp"
        android:layout_alignParentBottom="true">

        <LinearLayout
            android:id="@+id/linear_list"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:gravity="center"
            android:orientation="horizontal" />

        <TextView
            android:id="@+id/text_gm"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="32dp"
            android:background="@drawable/back_hs_qy"
            android:gravity="center"
            android:text="购买\n咨询"
            android:textColor="#ffffff"
            android:layout_marginTop="20dp"
            android:textSize="12dp"
            android:textStyle="bold" />
    </RelativeLayout>

</RelativeLayout>

2.所有用到的drawable资源文件

一个是主布局购买按钮,一个是item布局的背景。

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

    <!-- 背景颜色 -->
    <solid android:color="@color/bjs" />
    <size
        android:width="60dp"
        android:height="60dp" />
    <!-- 控制圆角大小 -->
    <corners android:radius="50dp" />

</shape>


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

    <!-- 背景颜色 -->
    <solid android:color="#ffffff" />

    <!-- 控制边界线颜色和大小 -->
    <stroke
        android:width="1dp"
        android:color="#ffffff" />

    <!-- 控制圆角大小 -->
    <corners android:radius="16dp" />

</shape>

该处使用的url网络请求的数据。

3.xml item布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f8f8f8"
    android:gravity="center"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="16dp"
        android:background="@drawable/bzhs_ff_16"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:background="@color/bjs"
            android:paddingLeft="15dp"
            android:paddingTop="3dp"
            android:paddingRight="15dp"
            android:paddingBottom="3dp"
            android:text="在售主力机型"
            android:textColor="#ffffff"
            android:textSize="14dp" />

        <TextView
            android:id="@+id/textname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="30dp"
            android:text="神马M50S"
            android:textColor="#232323"
            android:textSize="20dp"
            android:textStyle="bold" />

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="180dp"
            android:layout_marginTop="20dp"
            android:background="#262626" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="30dp"
            android:text="128T | 3328W | 26J/T"
            android:textColor="#232323"
            android:textSize="16dp" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="20dp"
            android:orientation="horizontal">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:text="价格  "
                android:textColor="#232323"
                android:textSize="16dp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:text="$1234433"
                android:textColor="#E88009"
                android:textSize="16dp" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

4.adapter适配器

/**
 * 作者:CaoLiulang
 * ❤
 * Date:2023/6/12
 * ❤
 * 模块 账单列表adapter
 */
public class KuangAdapter extends RecyclerView.Adapter<KuangAdapter.ViewHolder> {
    private List<KuangBean> list;
    private Context context;

    public KuangAdapter(List<KuangBean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    /**
     * 加载更多
     *
     * @param mPageList
     */
    public void setData(List<KuangBean> mPageList) {
        try {
            if (mPageList != null) {
                int previousSize = 0;
                try {
                    previousSize = list.size();
                } catch (Exception e) {
                    previousSize = 0;
                }
                int sizez = previousSize + 2;
                list.addAll(mPageList);
                notifyItemRangeInserted(sizez, mPageList.size());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.app_item, parent, false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    /**
     * 类似GetView
     *
     * @param holder
     * @param position
     */
    @Override
    public void onBindViewHolder(final ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
        holder.textname.setText(list.get(position).name);

    }

    //添加元素,需要告诉UI线程布局的变动
    public void update() {
        notifyDataSetChanged();
    }

    /**
     * 长度
     *
     * @return
     */
    @Override
    public int getItemCount() {
        return list.size();
    }

    /**
     * 初始化组件
     */
    class ViewHolder extends RecyclerView.ViewHolder {
        TextView textname;

        public ViewHolder(final View itemView) {
            super(itemView);
            textname = itemView.findViewById(R.id.textname);
        }
    }
}

5.javabean实体类

public class KuangBean {
    public String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "KuangBean{" +
                "name='" + name + '\'' +
                '}';
    }
}

6.activity使用

class KuangFragment : BaseFragment(), View.OnClickListener {

    private lateinit var list_view: RecyclerView
    private lateinit var adapter: KuangAdapter
    private lateinit var list: MutableList<KuangBean>
    private lateinit var linear_list: LinearLayout
    private lateinit var text_gm: TextView
    private var xb = 0

    fun newInstance(bundle: Bundle?): KuangFragment? {
        val fragment =
            KuangFragment()
        if (bundle != null) {
            fragment.arguments = bundle
        }
        return fragment
    }

    override fun getContentViewId(): Int {
        return R.layout.fragment_kuang
    }

    override fun initView(savedInstanceState: Bundle?) {
        list = mutableListOf()
        for (i in 1..4) {
            var bean = KuangBean()
            bean.setName("神马M50S$i")
            list.add(bean)
        }
        list_view = rootView!!.findViewById(R.id.list_view)
        linear_list = rootView!!.findViewById(R.id.linear_list)
        text_gm = rootView!!.findViewById(R.id.text_gm)
        list_view.layoutManager = LinearLayoutManager(
            activity,
            LinearLayoutManager.HORIZONTAL,
            false
        ) //竖向显示
        adapter = KuangAdapter(list, activity)
        list_view.adapter = adapter
        // 设置加载更多监听
        list_view.addOnScrollListener(object : EndlessRecyclerOnScrollListener() {

            override fun onLoadMore(newState: Int) {
                if (newState >= 0) {
                    setDate(newState)
                }
            }
        })
        val snapHelper = LinearSnapHelper()
        snapHelper.attachToRecyclerView(list_view)
        text_gm.setOnClickListener(this)
        setDate(0)
    }

    private fun setDate(po: Int) {
        xb = po
        //清空View
        linear_list.removeAllViews()
        for (i in 0 until list.size) {
            val flview =
                LayoutInflater.from(activity).inflate(R.layout.guild_itme, null) as LinearLayout
            val text_id: TextView = flview.findViewById(R.id.text_id)
            if (po == i) {
                text_id.setBackgroundResource(R.drawable.back_hs_12)
            } else {
                text_id.setBackgroundResource(R.drawable.back_hs1_12)
            }
            linear_list.addView(flview)
        }
    }

    override fun onClick(v: View?) {
        when (v?.id) {
            R.id.text_gm -> {
               
            }
        }
    }

总结

感觉就像买东西一样,物美价廉,值得推荐使用。文章来源地址https://www.toymoban.com/news/detail-707141.html

到了这里,关于Android之RecyclerView仿ViewPage滑动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android ViewPage2使用

    ViewPager2是AndroidX库中的一个控件, 用于实现滑动切换不同页面的功能。 它是ViewPager的升级版,相比于ViewPager,ViewPager2具有以下优点: 1、支持垂直滑动:ViewPager2可以支持水平和垂直两种滑动方式,而ViewPager只支持水平滑动。 2、更好的性能:ViewPager2使用RecyclerView作为底层实

    2024年02月16日
    浏览(23)
  • RecyclerView 滑动布局源码分析:带你深入掌握列表滑动机制

    作者:maxcion 现在 RV 已经初始化好了,那当我们进行滑动交互时代码又是如何执行的呢? RV 优秀就优秀在他是动态布局的,与 ScrollView 不同在于: ScrollView 是初始化时将所有child都 inflate 并 add 而 RV 是只 inflate 屏幕展示得下的child. 如果我们有100个child: ScrollView 便会在初始化时就

    2023年04月23日
    浏览(27)
  • 【Android】底部导航栏【BottomNavigationView】+【ViewPage2】

    问题需求 实现底部导航栏切换 问题解决 最简单的实现方式就是使用系统自动生成的模板页面,但是有时候会有一些问题,特别是需要去除【ActionBar】的情况下,这种情况下使用系统的模板页面就不好用了,此时可以使用下面这种解决方式。 【BottomNavigationView】+【ViewPage2】

    2023年04月18日
    浏览(38)
  • Android——viewpage2+tablayout+fragment动态添加删除

    一、简介: 1、添加和删除按钮可动态添加删减tab页面 2、获取每个fragment数据页上的数据 3、为每个数据页赋值 二、 效果图: 三、实现: 主要功能实现:( ViewPage2Fragment.java ) 先初始化适配器 frament数据页(ViewPage2DataFragment.java) 适配器(FragmentStateViewPager2Adapter.java) 主布

    2024年02月16日
    浏览(34)
  • 基于GSYVideoPlayer自定义布局结合RecyclerView高仿抖音实现上下滑动双击屏幕点赞/单击暂停,拖动进度条实时改变时间以及进度条放大

    注意代码量有点多,但是你不要就此放弃,看效果图决定你需不需该需求😀并且代码好理解基本上都是基于GSYVideoPlayer的方法进行重写改造出来的,请放心食用 GSYVideoPlayer是一款开源并且强大的Android视频播放器方便你们阅读了GSYVideoPlayer更快速的上手GSYVideoPlayer框架地址 效果

    2024年02月03日
    浏览(92)
  • Android RecyclerView使用简述

      RecyclerView是Android中非常受欢迎的控件,RecyclerView是官方在Android5.0之后新添加的控件,推出用来替代传统的ListView和GridView列表控件,所以如果你还在使用ListView的话可以替换为RecyclerView了。 文章的功能可以先运行看看效果,APK下载   对于RecyclerView的使用根据实际项目进

    2023年04月08日
    浏览(79)
  • Android开发—RecyclerView使用

    RecyclerView 在Android中用于创建列表。 官网的解释为: RecyclerView 可以让您轻松高效地显示大量数据。您提供数据并定义每个列表项的外观,而 RecyclerView 库会根据需要动态创建元素。 当RecyclerView的列表项滚出屏幕的时候,RecyclerView不会销毁该视图,相反而是将这些视图复用到

    2024年02月16日
    浏览(48)
  • 【Android】Recyclerview的缓存复用

    RecyclerView是Android开发中常用的一个高度可定制的列表视图组件。它是在ListView和GridView的基础上进行了改进和增强,旨在提供更好的性能和更灵活的布局管理。 RecyclerView的主要特点如下: 灵活的布局管理器(LayoutManager): RecyclerView使用LayoutManager来管理其子视图的布局方式。

    2024年02月15日
    浏览(31)
  • Android RecyclerView 实现瀑布流

    Android RecyclerView 使用大全 - 基础使用,item 动画,下拉刷新等 瀑布流也是个常用的显示控件了,但是在使用时经常遇到一些问题,比如滑动回顶部后出现空隙、item在滑动时乱跳等问题。 下面就来说说我怎么实现的瀑布流,并且怎么处理上面所说的这些问题的。 我使用了原生

    2024年02月09日
    浏览(56)
  • Android:RecyclerView自由拖动item

    原生就自带有可拖动item的工具:ItemTouchHelper 看下效果: 可拖动RecyclerView预览效果 接下来我们看如何使用。 其中判断条件中的item.isMovable这边是记录该item是否可以拖动,也可以换成其他判断条件比如根据位置判断等。 另外,需要留意一点,如果你是在onBindViewHolder中有设置点

    2024年01月23日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包