Android 自定义 ItemDecoration 分割线

01.需要实现的分割线功能

  • 需要实现的分割线功能
    • 可以设置分割线的颜色,宽度,以及到左右两边的宽度间距。

02.ItemDecoration方法说明

  • 几个重要的方法说明

阅读更多

Android ItemTouchHelper 实现交互动画

01.拖拽需要实现功能

  • 需要实现拖拽的功能如下所示
    • 长按item后拖动,与其他item交换位置
    • 按住item右面的图标后拖动,与其他item交换位置
    • 左滑item变透明并缩小,超出屏幕后,其他item补上
    • 右滑item变透明并缩小,超出屏幕后,其他item补上

02.几个重要的方法说明

阅读更多

Android SnapHelper 2

01.先看业务需求

  • LinearSnapHelper 实现了居中对齐,那么我们只要更改一下对齐的规则就行,更改为开始对齐(计算目标 View到 Parent start 要滑动的距离),其他的逻辑和 LinearSnapHelper 是一样的。因此我们选择继承 LinearSnapHelper
  • 大概流程
    • 重写calculateDistanceToFinalSnap方法,计算SnapView当前位置与目标位置的距离
    • 写findSnapView方法,找到当前时刻的SnapView
阅读更多

Android RecyclerView 缓存原理

01.性能如何优化

  • RecyclerView做性能优化要说复杂也复杂,比如说布局优化,缓存,预加载,复用池,刷新数据等等。
    • 其优化的点很多,在这些看似独立的点之间,其实存在一个枢纽:Adapter。因为所有的ViewHolder的创建和内容的绑定都需要经过Adapter的两个函数onCreateViewHolder和onBindViewHolder。
  • 因此性能优化的本质就是要减少这两个函数的调用时间和调用的次数。
    • 如果我们想对RecyclerView做性能优化,必须清楚的了解到我们的每一步操作背后,onCreateViewHolder和onBindViewHolder调用了多少次。因此,了解RecyclerView的缓存机制是RecyclerView性能优化的基础。
阅读更多

Android RecyclerView 上拉加载

01.添加recyclerView的滑动事件

  • 首先给recyclerView添加滑动监听事件。那么我们知道,上拉加载时,需要具备两个条件。第一个是监听滑动到最后一个item,第二个是滑动到最后一个并且是向上滑动。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    // 实现上拉加载重要步骤,设置滑动监听器,RecyclerView自带的ScrollListener
    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

    //用来标记是否正在向上滑动
    private boolean isSlidingUpward = false;

    @Override
    public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
    super.onScrollStateChanged(recyclerView, newState);
    // 当不滑动的时候
    // 在newState为滑到底部时
    if (newState == RecyclerView.SCROLL_STATE_IDLE) {
    //获取最后一个完全显示的itemPosition
    int lastItemPosition = layoutManager.findLastCompletelyVisibleItemPosition();
    int itemCount = layoutManager.getItemCount();
    //int itemCount1 = adapter.getItemCount();

    // 判断是否滑动到了最后一个item,并且是向上滑动
    if (lastItemPosition == (itemCount - 1) && isSlidingUpward) {
    handler.postDelayed(new Runnable() {
    @Override
    public void run() {
    updateRecyclerView(datas);
    }
    }, 2000);
    }
    }
    }

    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
    super.onScrolled(recyclerView, dx, dy);

    // 大于0表示正在向上滑动,小于等于0表示停止或向下滑动
    isSlidingUpward = dy > 0;
    }
    });
阅读更多

Android ItemAnimator

01.ItemAnimator基本概念

  • 官方有一个默认Item动画类DafaultItemAnimator,其中DefaultItemAnimator继承了SimpleItemAnimator,在继承了RecyclerView.ItemAnimator
  • SimpleItemAnimator 它是一个包装类,用来判断当前的ViewHolder到底是执行移动、移除、添加或者改变等行为。
  • DefaultItemAnimator 是执行具体动画类,它负责将viewHolder初始化、保存需要执行动画的ViveHolder以及动画信息、执行具体的动画。
阅读更多

Android RecycledViewPool

01.RecycledViewPool

  • RecycledViewPool

    • RecyclerViewPool用于多个RecyclerView之间共享View。只需要创建一个RecyclerViewPool实例,然后调用RecyclerView的setRecycledViewPool(RecycledViewPool)方法即可。RecyclerView默认会创建一个RecyclerViewPool实例。
    • 下列源码,是我借助于有道词典翻译部分注释内容……
阅读更多

Android ItemDecoration

01.ItemDecoration的用途

1.1 作用

  • 通过设置recyclerView.addItemDecoration(new DividerDecoration(this));来改变Item之间的偏移量或者对Item进行装饰。
  • 当然,你也可以对RecyclerView设置多个ItemDecoration,列表展示的时候会遍历所有的ItemDecoration并调用里面的绘制方法,对Item进行装饰。
阅读更多

Android SpanSizeLookup

00.先来看一个需求

  • 该页面中,同时包含列表,2列的网格,3列的网格如何优雅实现?
    • image

01.SpanSizeLookup的作用

阅读更多