道客优

1234
Android 滑动列表实现条目悬浮顶端
2019-03-21 刀刻油 阅读:1904

在Android中实现列表滚动,其中指定条目滑动到顶端时,悬浮在顶端,其他条目依然正常滑动。如下图:


 通过监听recyclerview滚动,根据recyclerview的滑动距离确定悬浮view的位置,实现条目悬浮。

final TextView tvStickyHeaderView = (TextView) findViewById(R.id.tv_sticky_header_view);

recyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() {
      @Override
      public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        View stickyInfoView = recyclerView.findChildViewUnder(
            tvStickyHeaderView.getMeasuredWidth() / 2, 5);

        if (stickyInfoView != null && stickyInfoView.getContentDescription() != null) {
          tvStickyHeaderView.setText(String.valueOf(stickyInfoView.getContentDescription()));
        }

        View transInfoView = recyclerView.findChildViewUnder(
            tvStickyHeaderView.getMeasuredWidth() / 2, tvStickyHeaderView.getMeasuredHeight() + 1);

        if (transInfoView != null && transInfoView.getTag() != null) {
        
          int transViewStatus = (int) transInfoView.getTag();
          int dealtY = transInfoView.getTop() - tvStickyHeaderView.getMeasuredHeight();
          
          if (transViewStatus == StickyExampleAdapter.HAS_STICKY_VIEW) {
            if (transInfoView.getTop() > 0) {
              tvStickyHeaderView.setTranslationY(dealtY);
            } else {
              tvStickyHeaderView.setTranslationY(0);
            }
          } else if (transViewStatus == StickyExampleAdapter.NONE_STICKY_VIEW) {
            tvStickyHeaderView.setTranslationY(0);
          }
        }
      }
    });

下载源码

推荐阅读: