1.设计思想
其实当你看到一个布局或界面时,你首先要想怎么实现,用什么控件,当时我第一个想到的就是listview,但listview没有办法实现横向滑动,所以决定用RecycleView,最开始想的是用2个RecycleView(一个横向和一个竖向)。其实这里有一个问题,当滑动竖向RecycleView时,横向RecycleView是不会跟着一起动的,这从用户的角度来看体验肯定不好(开发者可以以用户的角度去开发,这样产品会有更多的用户体验)
最后的设计是,外面有一个顶层竖向RecycleView,横向RecycleView是其中一个Item。
1.准备横向RecycleView的布局
<?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="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/hrecycleview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</LinearLayout>
2.准备横向RecycleView的Item的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="169dp">
<TextView
android:id="@+id/text5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/imagemap"
android:layout_marginLeft="4dp"
android:layout_marginTop="16dp"
android:text="精选栏目"
/>
<ImageView
android:id="@+id/imagemap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:src="@drawable/shape"
/>
<ImageView
android:id="@+id/imageview"
android:layout_width="239dp"
android:layout_height="143dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="46dp"
android:src="#ad226bff" />
<TextView
android:id="@+id/text1"
android:layout_width="215dp"
android:layout_height="36dp"
android:layout_alignTop="@id/imageview"
android:layout_marginLeft="12dp"
android:layout_alignStart="@id/imageview"
android:layout_marginTop="54dp"
android:text="RecycleView实现首页复杂布局效果(横向和竖向)…"
android:textColor="#ffffffff"/>
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/text1"
android:layout_marginTop="16dp"
android:layout_alignStart="@id/text1"
android:layout_marginLeft="2dp"
android:text="05-04 15:20 | 9999阅"
android:textColor="#ffffffff"/>
<View
android:layout_width="3dp"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/imageview"/>
</RelativeLayout>
3.设置横向RecycleView的适配器
class SecondAdapter(val datalist1: List<DateMessage>) :
RecyclerView.Adapter<SecondAdapter.MyViewHolder>() {
class MyViewHolder