android中LinearLayoutManager一键返回顶部示例

之前在学习RecyclerView的时候,建立了一个可以滑动的View列表,但是当滑动距离过长的时候,需要手动返回到顶部,于是加了一个一键返回顶部的按钮。

效果图

要实现这种效果,有两点需要实现:

1、控制LanyoutManager滑动距离,根据滑动状态(距离)改变去设置隐藏或者显示。

2、设置top的点击事件,点击回到顶部。

很遗憾LayoutManager只提供给了我们获取第一个可见item的高度的方法,而这里我们需要获取的是从开始到现在滑动的总距离,所以不得不动手去自己写,网上也有很多方法,试了一通还是这个比较好用。

建议如果对RecyclerView还不是太熟悉的可以试试他的一些获取高度的方法,像getChildAt()、getHeight(),来看一下效果,关于index,可以通过findFirstVisibleItemPosition();获取,刚开始很天真的以为官方会提供有方法,然而进方法源码去看并没有,如果各位同行有更好的方法欢迎留言。

 public int getScollYDistance() {
  int position = layoutManager.findFirstVisibleItemPosition();
  View firstVisiableChildView = layoutManager.findViewByPosition(position);
  int firstVisiableChildViewTop = firstVisiableChildView.getTop();
  int itemHeight = firstVisiableChildView.getHeight();
  //可见的item的index*item高度-最顶端位置
  return (position) * itemHeight - firstVisiableChildViewTop;
 }

获取高度之后

我们需要获取高度,设置效果

可以diy各种效果,常见的效果比如支付宝开始滑动的时候,title会渐变最后慢慢隐藏换成其他功能。都在这个方法里实现

如果只需要我们做返回顶部的效果,那么直接在这里设置距离就行了,这个距离就是滑动的总距离,当滑动距离超过400的时候设置按钮可见,小于400的时候隐藏掉。

 public void selectItem() {

  //弹出top返回顶部按钮
  if (getScollYDistance()>=400){
   backTop.setVisibility(View.VISIBLE);
  }else {
   backTop.setVisibility(View.GONE);
  }

 }

当然这只是最简单的样式,要复杂的一点的话可以这样:

在滑动中改变效果,或者设置渐变效果

if (getScollYDistance() <= 0) {
   float scale = (float) getScollYDistance() / 400;
   float alpha = (255 * scale);
   // 只是layout背景透明(仿知乎滑动效果)
   tvTitle.setBackgroundColor(Color.argb((int) alpha, 254, 184, 6));
  } else {
//   tvTitle.setBackgroundColor(Color.argb((int) 0, 254, 184, 6));
   tvTitle.setVisibility(View.GONE);
  }

等等,自己想要什么样的效果,在这里面设置就行。

然后只需要我们在滑动事件中添加效果。

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

    selectItem();
}

最后不要忘了设置返回按钮的监听事件

只一行代码scrollToPosition(0);每次点击让其返回初始位置即可完成一键返回到顶部的操作。

  backTop.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    recyclerView.scrollToPosition(0);
   }
  });

附上xml:

 <RelativeLayout
  android:id="@+id/view_relat"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
<android.support.v4.widget.SwipeRefreshLayout
 android:id="@+id/swipeRefreshLayout"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
 android:id="@+id/recyclerView"
 android:dividerHeight="2dp"
 android:layout_width="match_parent"
 android:layout_height="match_parent"/>
</android.support.v4.widget.SwipeRefreshLayout>
 <RelativeLayout
  android:layout_width="80dp"
  android:layout_height="80dp"
  android:layout_alignParentBottom="true"
  android:layout_alignParentEnd="true">
 <ImageView
  android:id="@+id/back_top"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:src="@drawable/back_top_icon"
  android:visibility="gone"/>
 </RelativeLayout>
 </RelativeLayout>

源码下载:android-CollectionDemo_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android scrollToTop实现点击回到顶部(兼容PullTorefreshScrollview)

    前言 最近因为项目组需求,特研究了一下"回到顶部"效果,即:页面里有scrollview,内容很多,当滑动到页面下面或者更深时,需要回到顶部,即可点击出现的按钮,省得回滑N久.我没有搜,或许网上有很多这样的例子,此文写的不好的地方,望指点. 效果图如下 实现方法 初一看是不是觉得很简答?没错,当时我也是这样想的页面内容很长,就弄个scrollview,回到顶部按钮需要固定在右下角,故大概的布局代码: <?xml version="1.0" encoding=&

  • Android点击按钮返回顶部实现代码

    点击按钮返回顶部,直接上代码吧 布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent

  • Android悬浮按钮点击返回顶部FloatingActionButton

    先看一下Android悬浮按钮点击回到顶部的效果: FloatingActionButton是Design Support库中提供的一个控件,这个控件可以轻松实现悬浮按钮的效果 首先,要在项目中使用这个悬浮按钮就要先把design这个包导入项目 gradle中加入依赖 compile 'com.android.support:design:25.0.0' 接下来就是在xml中使用: 我这里是放置一个listView模拟返回顶部 <?xml version="1.0" encodi

  • Android实现滑动到顶部悬停的效果

    先来看下要实现效果图: 查阅资料后,发现网上大部分都是用这种方法实现的: 多写一个和需要悬浮的部分一模一样的layout,先把浮动区域的可见性设置为gone.当浮动区域滑动到顶部的时候,就把浮动区域B的可见性设置为VISIBLE.这样看起来就像悬浮在顶部不动了. 这里介绍的是另外一种方式: 使用design包中的控件 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.

  • android中LinearLayoutManager一键返回顶部示例

    之前在学习RecyclerView的时候,建立了一个可以滑动的View列表,但是当滑动距离过长的时候,需要手动返回到顶部,于是加了一个一键返回顶部的按钮. 效果图 要实现这种效果,有两点需要实现: 1.控制LanyoutManager滑动距离,根据滑动状态(距离)改变去设置隐藏或者显示. 2.设置top的点击事件,点击回到顶部. 很遗憾LayoutManager只提供给了我们获取第一个可见item的高度的方法,而这里我们需要获取的是从开始到现在滑动的总距离,所以不得不动手去自己写,网上也有很多方

  • Android中activity处理返回结果的实现方式

    大家在网上购物时都有这样一个体验,在确认订单选择收货人以及地址时,会跳转页面到我们存入网站内的所有收货信息(包含收货地址,收货人)的界面供我们选择,一旦我们点击其中某一条信息,则会自动跳转到订单提交界面,此时的收货信息已经变为我们之前选择的收件信息. 为了实现这个功能,Android提供了一个机制,跳转到其他activity时,再返回,可以接受到其他activity返回的值,无需再start新的当前activity:下面的示例中,创建两个activity,其中在MainActivity中提示输入

  • Android中的人脸检测的示例代码(静态和动态)

    (1)背景. Google 于2006年8月收购Neven Vision 公司 (该公司拥有10多项应用于移动设备领域的图像识别的专利),以此获得了图像识别的技术,并加入到android中.Android 中的人脸识别技术,用到的底层库:android/external/neven/,framework 层:frameworks/base/media/java/android/media/FaceDetector.java. Java 层接口的限制:A,只能接受Bitmap 格式的数据:B,只能

  • Android中Fragment的基本用法示例总结

    前言 fragment 可认为是一个轻量级的Activity,但不同与Activity,它是要嵌到Activity中来使用的,它用来解决设备屏幕大小的不同,主要是充分利用界面上的空间,如平板上多余的空间.一个Activity可以插入多个Fragment,可以认为Fragment就是Activity上的一个View. 本文主要介绍了关于Android中Fragment的基本用法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.fragment管理 在activity动态加载f

  • Android中使用protobuf的具体示例

    简介 Google Protocol Buffers 简称 Protobuf,类似 json 或 XML,是一种序列化结构数据的机制,但是比它们更小.更快.更简单.同时支持多语言,跨平台. 目前主要有两个大版本:proto2 和 proto3. 其中 proto2 支持 Java.Python. Objective-C.和 C++. proto3 增加了对Go.JavaNano.Ruby.和 C#的支持. proto例子 syntax = "proto3"; package tutor

  • android中贝塞尔曲线的应用示例

    前言: 贝塞尔曲线又称贝兹曲线,它的主要意义在于无论是直线或曲线都能在数学上予以描述.最初由保罗·德卡斯特里奥(Paul de Casteljau)于1959年运用德卡斯特里奥演算法开发(de Casteljau Algorithm),在1962,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表.目前广泛应用于图形绘制领域来模拟光滑曲线,为计算机矢量图形学奠定了基础.在一些图形处理软件中都能见到贝塞尔曲线,比如CorelDraw中翻译成"贝赛尔工具":而在Firewo

  • Python中函数的返回值示例浅析

    前言: 前面我们介绍了简单的介绍了函数和函数的参数,今天我们来说一下Python中函数的返回值. 函数的返回值:函数运算的结果,需要进一步的操作时,给一个返回值return用来返回函数的结果,如果没有返回值,默认为None,python中可以间接返回多个值,也可以返回一个元组,程序在运行的时候,一旦遇到return,函数执行结束,后面的代码不会执行. def mypow(x,y=2): res = x**y print(res) return res print('python') mypow(

  • Android中PopupWindow响应返回键并关闭的2种方法

    PopupWindow 跟我们的 Activity 不一样,因为我们在构造 PW 的时候往往不是继承来的,而是 new 出来的.所以不能使用重写 PW 的 onKeyDown() 之类的方法来截获键盘事件.好在 PW 本身的特性让我们很容易就能做到用返回键来退出,当然我们也可以截获键盘事件,这样就有两种方法了.   方法一: 最简单的方法 在 new 的时候,使用下面的方法: 复制代码 代码如下: popupWindow = new PopupWindow(popupWindow_view, 2

  • ANDROID中自定义对话框AlertDialog使用示例

    在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式.AlertDialog中定义的一些对话框往往无法满足我们关于对话框的需求,这时我们就需要通过自定义对话框VIEW来实现需求,这里我自定义一个登陆的提示对话框,效果图显示如下: Layout(alertdialog自定义登陆按钮)界面代码: <?xml version="1.0" en

随机推荐