RecyclerView的基本用法

RecyclerView已经出来很长时间了,我相信现在用recyclerview的肯定要比ListVIew的多,今天就总结一下这个RecyclerView的基本使用。

第一种:添加LayoutAnimator上效果


这个效果的实现首先在res下创建一个动画的文件夹anim,然后再在anim下创建一个名为item_animation_fall_down.xml里面的代码为

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="600">

    <translate
        android:fromYDelta="-20%"
        android:toYDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        />

    <alpha
        android:fromAlpha="0"
        android:toAlpha="1"
        android:interpolator="@android:anim/decelerate_interpolator"
        />

    <scale
        android:fromXScale="105%"
        android:fromYScale="105%"
        android:toXScale="100%"
        android:toYScale="100%"
        android:pivotX="50%"
        android:pivotY="50%"
        android:interpolator="@android:anim/decelerate_interpolator"
        />

</set>

上面定义的动画元素将会同时运行,这里是对每个动画元素的解释:

  • Translate Y -20% to 0%
    在动画开始前,把view向上移动自身高度的20%,然后让他下降到自己最终的位置。

  • Alpha 0 to 1
    从完全不可见慢慢过渡到完全可见。

  • Scale X/Y 105% to 100%
    放大到105%,然后缩小的实际大小。


再在anim下创建一个layoutAnimation名为layout_animation_fall_down.xml,代码为:

<layoutAnimation
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:animation="@anim/item_animation_fall_down"
    android:delay="15%"
    android:animationOrder="normal"
    />
  • android:animation="@anim/item_animation_fall_down”
    定义item运行的动画(资源)。

  • android:delay=”15%" 
    为每个item动画添加一个延时,基于item动画的duration。0%将导致所有item同步运行,100%则让前一个item的动画运行完了下一个item才开始动画。我们这里使用的是15%,表示item A的动画运行了15%之后才开始运行B的动画。

  • android:animationOrder="normal" 
    有三种选择:normal, reverse 和 random。它可以控制布局元素运行动画的顺序。Normal是按照布局的自然顺序( vertical: top to bottom, horizontal: left to right),Reverse跟Normal是相反的,Random则按照随即的顺序。

使用 LayoutAnimation

应用LayoutAnimation可以通过代码实现,也可以通过XML实现。XML的使用方式:

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layoutAnimation="@anim/layout_animation_fall_down"
    />

使用Java代码的方式:

int resId = R.anim.layout_animation_fall_down;
LayoutAnimationController animation = AnimationUtils.loadLayoutAnimation(this, resId);
recyclerView.setLayoutAnimation(animation);

如果让Adapter中的数据更新时也使用这种动画,可以在数据改变的时候执行LayoutAnimation就可以了,代码如下:

adapter.notifyDataSetChanged();
recyclerView.scheduleLayoutAnimation();

第2中是Item的交换和删除先上效果:


这个拖动跟删除只要是通过ItemTouchHelper来实现的:下面我贴出只要代码
1.要建一个类继承ItemTouchHelper.Callback

public class ItemTouchHelperCallback extends ItemTouchHelper.Callback {
    private ItemTouchListener mListener;
    public ItemTouchHelperCallback(ItemTouchListener listener){
        mListener = listener;
    }
    //这个地方是设置监听的事件
    @Override
    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        return makeMovementFlags(ItemTouchHelper.UP|ItemTouchHelper.DOWN,ItemTouchHelper.LEFT);
    }
    //这就是交换会触发的方法
    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
        if(mListener != null){
            mListener.onMove(viewHolder.getAdapterPosition(),target.getAdapterPosition());
        }
        return true;
    }
    //这是删除的回调方法
    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
        if(mListener != null){
            mListener.onRemove(viewHolder.getAdapterPosition());
        }
    }

}
2.创建一个接口类:用于当触发Callback中的方法是回调到Adapter
interface ItemHelperListener {
    /**
     * 删除时的回调
     */
    fun onRemove(position:Int)

    /**
     * 交换时的回调
     */
    fun onSwap(formPosition:Int, toPosition:Int)
}

3.让Adapter实现上面的接口:

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> implements ItemTouchListener {
    @Override
    public void onMove(int from, int to) {
        Collections.swap(mData,from,to);
        notifyItemMoved(from,to);
    }

    @Override
    public void onRemove(int position) {
        mData.remove(position);
        notifyItemRemoved(position);
    }
}

4.让ItemTouchHelper与RecyclerView绑定:

ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback(adapter));
itemTouchHelper.attachToRecyclerView(recyclerView);

这样就实现了上面的效果。

我将会在最近更新这个RecyclerView源码详解跟ItemTouchHelper详解

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecyclerView是Android开发中的一个常见UI组件,用于展示大量数据列表。以下是RecyclerView基本用法: 1. 导入依赖库: 在build.gradle文件中加入以下依赖库: ```groovy implementation 'androidx.recyclerview:recyclerview:1.2.1' ``` 2. 在布局文件中添加RecyclerView: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. 创建RecyclerView的Adapter: 创建一个继承自RecyclerView.Adapter的Adapter类,实现以下三个方法: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { // 创建ViewHolder @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); return new ViewHolder(view); } // 绑定ViewHolder @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { // 设置数据 } // 返回数据项个数 @Override public int getItemCount() { return data.size(); } // ViewHolder类 static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(@NonNull View itemView) { super(itemView); // 初始化控件 } } } ``` 4. 设置LayoutManager: LayoutManager用于设置RecyclerView的布局方式,常见的有LinearLayoutManager、GridLayoutManager和StaggeredGridLayoutManager。例如: ```java LinearLayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); ``` 5. 设置Adapter: ```java MyAdapter adapter = new MyAdapter(data); recyclerView.setAdapter(adapter); ``` 6. 实现Item点击事件: RecyclerView没有内置的Item点击事件,需要自己实现。可以在ViewHolder中设置监听器,也可以在Activity或Fragment中设置监听器。例如: ```java public class MainActivity extends AppCompatActivity { private List<String> data = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RecyclerView recyclerView = findViewById(R.id.recycler_view); MyAdapter adapter = new MyAdapter(data); recyclerView.setAdapter(adapter); // Item点击事件 adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() { @Override public void onItemClick(int position) { // 处理点击事件 } }); } } ``` 以上就是RecyclerView基本用法。除此之外,RecyclerView还支持下拉刷新、上拉加载更多等功能,可以根据实际需求进行扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值