「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」
RecyclerView
纵向滚动demo创建流程
1.创建实体类,包含imageId、name 2.新建子项布局fruit_item.xml,包含ImageView、TextView 3.在Activity_main.xml布局中加入RecyclerView布局控件 4.新建适配器,继承自RecyclerView.Adapter 5.在适配器中编写ViewHolder类,与view中的数据进行绑定,建立连接 6.重写getItemCount方法,获取item的数量 7.重写onCreateViewHolder方法,将子项布局加载进父类布局中 8.重写onBindViewHolder方法,对RecyclerView子项数据进行赋值,会在每个子项被滚到屏幕内时候执行,通过position参数得到子项的实例对象 9.在MainActivity中初始化list数据,设置RecyclerView布局类型,创建适配器对象,完成适配器设置,在RecyclerView与数据间关联成功
设置点击监听:
1.对ViewHolder中的子项最外层的布局实例对象设置点击监听onClick和长按监听onLongClick 2.若将onClick点击监听放在Activity中实现,可创建接口类,添加onClick方法,在onBindViewHolder中调用接口方法,传递position参数,在Activity中实现
横向滚动demo创建流程
1.创建实体类,包含imageId、name
2.新建子项布局fruit_item.xml,包含ImageView、TextView
3.在Activity_main.xml布局中添加FrameLayout(帧布局)加入RecyclerView布局控件
<com.example.recyclerviewtest3.MyRecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_gravity="bottom"
android:scrollbars="none"/>
4.重写RecyclerView类,重写onLayout和onTouchEvent方法,onLayout方法实现对子项view位置布局,onTouchEvent方法实现手机屏幕触摸时触发事件
5.编写一个接口类onItemScrollOnclickListener,内部编写一个接口函数onChange,对图片传递参数,改变页面中的图片
6.onTouchEvent方法中获取第一个子项view,通过onItemScrollOnclickListener.onChange方法,传递要改变的图片的id
7.新建适配器,继承自RecyclerView.Adapter
8.在适配器中编写ViewHolder类,与view中的数据进行绑定,建立连接
9.重写getItemCount方法,获取item的数量
10.重写onCreateViewHolder方法,将子项布局加载进父类布局中
11.重写onBindViewHolder方法,对RecyclerView子项数据进行赋值,会在每个子项被滚到屏幕内时候执行,通过position参数得到子项的实例对象
12.在MainActivity中初始化list数据,设置RecyclerView布局类型,创建适配器对象,完成适配器设置,在RecyclerView与数据间关联成功,实现点击,滚动监听方法。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initFruits();
recyclerView = (MyRecyclerView) findViewById(R.id.recycler_view);
content_image = findViewById(R.id.content_image);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(layoutManager);
FruitAdapter adapter = new FruitAdapter(fruitList,this);
adapter.setmOnItemClickListener(new FruitAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(MainActivity.this,position+"",Toast.LENGTH_SHORT).show();
}
});
recyclerView.setAdapter(adapter);
recyclerView.setItemScrollOnclickListener(new MyRecyclerView.onItemScrollOnclickListener() {
@Override
public void onChange(View view, int positon) {
content_image.setImageResource(fruitList.get(positon).getImageId());
}
});
}
RecyclerView中onScrollStateChanged方法和onScrolled
1.onScrollStateChanged(RecyclerView recyclerView, int newState)
回调的两个变量的含义: recyclerView: 当前在滚动的RecyclerView newState: 当前滚动状态.
其中newState有三种值:
// The RecyclerView is not currently scrolling.(静止没有滚动)
public static final int SCROLL_STATE_IDLE = 0;
// The RecyclerView is currently being dragged by outside input such as user touch input.(正在被外部拖拽,一般为用户正在用手指滚动)
public static final int SCROLL_STATE_DRAGGING = 1;
// The RecyclerView is currently animating to a final position while not under outside control.(自动滚动)
public static final int SCROLL_STATE_SETTLING = 2;
2.onScrolled(RecyclerView recyclerView, int dx, int dy)
在滚动时调用
recyclerView : 当前滚动的view dx : 水平滚动距离 dy : 垂直滚动距离
dx > 0 时为手指向左滚动,列表滚动显示右面的内容 dx < 0 时为手指向右滚动,列表滚动显示左面的内容 dy > 0 时为手指向上滚动,列表滚动显示下面的内容 dy < 0 时为手指向下滚动,列表滚动显示上面的内容