上滑ScrollView,实现控件顶部悬浮

因为看到网上的比较复杂,所以自己写了这篇,希望能够足够简单


先看效果图,是不是你需要的:

不论怎么滑动屏幕内容,当蓝色部分到达顶部时,便会一直会显示在顶部。

 



实现原理:

顶部1,顶部2布局需要完全一样,初始化时顶部1不显示,为Gone。

顶部2向上滑动到屏幕顶端时,设置顶部1可见,由于顶部1不包含在ScrollVIew里面,所以会一直存在,不会被滑动;

而向下滑时,当顶部2到达屏幕顶端,隐藏顶部1,显示顶部2即可。

所以实现关键步骤是:

判断顶部2是否滑动到了顶部,也就是标题栏之下。

先看布局,很简单:

布局和原理里面一致:顶部1,ScrollView 就没了。

只是有一个自定义的ScrollView,这个是重点,在代码里面讲,布局也没什么。

记得顶部1不再ScrollView里面,二顶部2在ScrollView里面哦~

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="runa.sometest.slidingstop.SlidingActivity"> <TextView
        android:id="@+id/top1"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="this蓝色部分滑动到顶部,悬浮"
        android:textColor="@android:color/white"
        android:gravity="center"
        android:visibility="gone"
        android:background="#006699"/> <com.sometest.slidingstop.MyScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"> <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"><ImageView
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:scaleType="fitXY"
                android:src="@drawable/img1"/><TextView
                android:id="@+id/top2"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:text="this蓝色部分滑动到顶部,悬浮"
                android:textColor="@android:color/white"
                android:gravity="center"
                android:background="#006699"/><TextView
                android:layout_margin="10dp"
                android:layout_width="match_parent"
                android:layout_height="2000dp"
                android:text="\n这里只是一个Textview,高度2000\n1\n2\n3\n4\n5" /></LinearLayout> </com.sometest.slidingstop.MyScrollView>
</LinearLayout>

接下来就看自定义的ScrollView:

这里面关键的就是onScrollChanged这个方法,实现了ScrollView滑动距离的监听。

只用看有注释的地方。

public class MyScrollView extends ScrollView {private static StopCall stopCall;//ScrollView向上滑动到顶部的距离
    private int upH;public MyScrollView(Context context) {super(context);}public MyScrollView(Context context, AttributeSet attrs) {super(context, attrs);//赋值:300很重要,这个值是顶部2上面的高度,也就是本例中图片的高度
        upH = dpTopx(300);//单位是dp}public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}public static void setCallback(StopCall c){stopCall =c ;} 
   /**
   * 关键部分在这里,测量当前ScrollView滑动的距离
   * 其中t就是,单位是px哦,不是dp
   * stopCall是一个接口,是为了在Activity中实现设置顶部1/2可不可见
   */ 
   @Override    protected void onScrollChanged(int l, int t, int oldl, int oldt) {        super.onScrollChanged(l, t, oldl, oldt);        if(t>upH){//如果滑动距离>本例中图片高度            stopCall.stopSlide(true);//设置顶部1可见,顶部2不可见        }else{//否则            stopCall.stopSlide(false);//设置顶部1不可见,顶部2可见        }    }     /**     * F: dp转成为px     */    private int dpTopx(  int dpValue) {        final float scale = this.getResources().getDisplayMetrics().density;        return (int) (dpValue * scale + 0.5f);    }}

最后看一下Activity:

/**
 * 接口实现,可不可就
 */
public void stopSlide(boolean isStop){if(isStop){t1.setVisibility(View.VISIBLE);t2.setVisibility(View.GONE);}else {t2.setVisibility(View.VISIBLE);t1.setVisibility(View.GONE);}
}


接口:

public interface StopCall {public void stopSlide(boolean isStop);
}


总结;

其实最最关键的点就只有一个:测量当前ScrollView滑动的距离,如果顶部2到达了顶部,那么设置顶部1可见。否则不可见。



-----------------------------

因为工程不是单独的,里面还有很多其它内容,所以就不上传了,代码很简单,都贴在本文里面了,关键的关键是看懂实现原理。

如果还有任何问题,可以联系我:727643332


-------------------2016/05/11







上滑ScrollView,实现控件顶部悬浮相关推荐

  1. 安卓ScrollView向上滑动控件顶部悬浮效果实现

    文章目录 效果图 实现思路 代码布局.逻辑 布局文件 自定义ViewNorthernScrollViewListener.java MainActivity.java 效果图 如果你要的不是以下的效果 ...

  2. asp.net 上传大文件控件

    这段时间写了个asp.net 上传大文件控件.经过测试,在ie中可显示进度条.特此共享,望广大网友多提意见. 大文件上传控件(包含进度条) 使用说明如下: <summary>      上 ...

  3. Android直播软件搭建左滑右滑清屏控件

    Android直播软件搭建左滑右滑清屏控件 最近在迭代直播软件搭建功能时,项目中之前的左滑清屏是用ViewPager实现的.这次迭代遇到一个布局层次导致的点击失效问题,继续用ViewPager的话改动 ...

  4. Android所有View通用下拉刷新上拉加载控件

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38868463 前面写过一篇关于下拉刷新控件的博客下拉刷新控件终结者:Pull ...

  5. Android下拉刷新上拉加载控件,对所有View通用!

    前面写过一篇关于下拉刷新控件的博客下拉刷新控件终结者:PullToRefreshLayout,后来看到好多人还有上拉加载更多的需求,于是就在前面下拉刷新控件的基础上进行了改进,加了上拉加载的功能.不仅 ...

  6. 打造Android万能下拉刷新上拉加载控件

    转载请注明出处:http://blog.csdn.net/binbinqq86/article/details/70159782 关于列表刷新加载的自定义控件,网上数不胜数,但别人的用起来始终不是那么 ...

  7. iOS实现ScrollView中子控件(Button,自定义View)的触摸事件响应

    最近要做个信息登记界面,在scrollView中添加了多个button和一个自定义的view(画板)来实现签名效果,画板中实现了touchBegin,touchMove等触摸事件方法.为了使butto ...

  8. android课程表控件、悬浮窗、Todo应用、MVP框架、Kotlin完整项目源码

    Android精选源码 Android游戏2048 MVP Kotlin项目(RxJava+Rerotfit+OkHttp+Glide) Android基于自定义Span的富文本编辑器 android ...

  9. 【Android开发】自定义ListView,使用通用适配器,并实现ListView上的每一项和每一项上的按钮等控件同时监听

    ListView在Android开发中是比较常用的系统组件,但是有时候我们除了需要做ListView上每一行的点击监听事件之外,如果每一行上还有其他需要监听的控件例如Button.CheckBox等, ...

最新文章

  1. php脚本函数,PHP执行系统命令函数实例讲解
  2. 5.深度学习练习:Deep Neural Network for Image Classification: Application
  3. 浅谈Opencl四大模型之Programming Model
  4. Netty工作笔记0013---Channel应用案例4Copy图片
  5. mysql 分页 pageindex_mysql 超1亿数据,优化分页查询
  6. 主流的推荐系统算法总结
  7. Tips:PowerDesigner16.5 图表显示Code以及 Columns新增Commet显示
  8. android 阻尼函数,数学的 H5 应用:拖动阻尼
  9. IP地址介绍,子网划分(VLSM),构造超网(CIDR) 详解
  10. Command CompileAssetCatalog emitted errors but did not return a nonzero exit code to indicate failur
  11. win7 修改屏幕休眠时间
  12. pc二维码支付demo(支付宝/微信)
  13. 微信小程序项目实例——手势解锁
  14. 微信小程序***实现身份验证
  15. Linux电源管理(一)电源管理系统架构
  16. Day499500501502503504.马士兵22春招面试题① -面经
  17. 毕业设计 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python
  18. lua连接数据库之luasql ------ luasql连接mysql数据库 及 luasql源码编译
  19. 解决CAD中炸开(explode))命令无效的方法
  20. java -jar 远程调试_java笔记:远程调试

热门文章

  1. python 北京出租车收费3.45_2017年各城市出租车收费标准
  2. 鸿蒙服务国内市场,华为鸿蒙正式挑战iOS和安卓,首先要在中国市场站稳脚跟
  3. 全自动一键签到v1.0小工具
  4. 火麻油的功效与作用 火麻油怎么吃
  5. 阿里云盘获取Refresh Token的方法
  6. 复活小米蓝牙手柄,让手柄控制电脑PC玩React写的网页游戏
  7. java模板引擎性能,内容太过真实
  8. 解决FLASHCS5代码提示无效的方法_…
  9. linux命令:查看本机IP地址 curl ip.gs
  10. 根据三角形的三条边长,判断三角形