先来看一下效果图

从图中不难看出,我这里使用了ScrollView嵌套ListView的方式来实现的这种效果。
这里我们需要重写一下ScrollView,代码如下:

package com.gsssk.ddpolice.myview;import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;/*** Created by Administrator on 2016/6/15.*/
public class MyScrollView extends ScrollView {//回调接口的对象private OnScrollListener onScrollListener;public MyScrollView(Context context) {super(context);}public MyScrollView(Context context, AttributeSet attrs) {super(context, attrs);}public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overridepublic boolean onTouchEvent(MotionEvent ev) {return super.onTouchEvent(ev);}/**在滑动的时候调用我们自己写的回调方法,来获取滑动距离*/@Overrideprotected void onScrollChanged(int l, int t, int oldl, int oldt) {super.onScrollChanged(l, t, oldl, oldt);if(onScrollListener!=null){onScrollListener.onScroll(t);}}/**滑动回调监听的接口*/public interface OnScrollListener{/**回调方法,返回MyScrollView在Y轴方向的滑动距离*/public void onScroll(int scrollY);}public OnScrollListener getOnScrollListener() {return onScrollListener;public void setOnScrollListener(OnScrollListener onScrollListener) {this.onScrollListener = onScrollListener;}
}

这里MyScrollView继承了ScrollView,并重写了onScrollChanged()方法,这个方法在ScrollView滑动的过程中不断被调用,通过我们写的接口中的回调方法来获取滑动的距离。

int ViewGroupTop;
@Overridepublic void onWindowFocusChanged(boolean hasFocus) {super.onWindowFocusChanged(hasFocus);if (hasFocus) {获得ll_ViewGroup1_LRDA的顶部viewGroupTop = ll_Location1_LifeRewardDetail.getBottom();}}

如图评论和分享的所在的LinearLayout,通过这个方法来得到它的顶部位置。
在下面的java代码中评论和分享的所在的LinearLayout的id=ll_Top_LifeRewardDetail
评论和分享的所在的LinearLayout的父布局叫ll_ViewGroup2_LRDA也是一个LinearLayout。
想实现悬浮效果在顶部需要给它留一个父布局LinearLayout,
id=ll_ViewGroup2_LRDA。平常的时候他是隐藏的,需要的时候他是显现的。

msv_ScrollView_LRDA.setOnScrollListener(this);//监听滚动Y值变化,通过addView和removeView来实现悬停效果@Overridepublic void onScroll(int scrollY) {//如果滑动的距离大于分享评论所在的位置if (scrollY >= viewGroupTop) {//如果分享评论不在顶部的父布局中if (ll_Top_LifeRewardDetail.getParent() != ll_ViewGroup2_LRDA) {//让顶部父布局显示出来     ll_ViewGroup2_LRDA.setVisibility(View.VISIBLE);//让listView获得焦点     lv_Share_LifeRewardDetail.setFocusable(true);lv_Comment_LifeRewardDetail.setFocusable(true);//把分享和评论从原始的父布局中移除 ll_ViewGroup1_LRDA.removeView(ll_Top_LifeRewardDetail);//把分享评论加入顶部的布局中ll_ViewGroup2_LRDA.addView(ll_Top_LifeRewardDetail);}} //如果滑动距离小于分享评论所在的位置else if (ll_Top_LifeRewardDetail.getParent() != ll_ViewGroup1_LRDA) {ll_ViewGroup2_LRDA.setVisibility(View.GONE);lv_Share_LifeRewardDetail.setFocusable(false);lv_Comment_LifeRewardDetail.setFocusable(false);ll_ViewGroup2_LRDA.removeView(ll_Top_LifeRewardDetail);ll_ViewGroup1_LRDA.addView(ll_Top_LifeRewardDetail);}}

通过上述代码可以看出,实现顶部悬浮效果分为四部步:

1.确定要悬浮的布局(这里是分享评论)、给悬浮布局一个不在悬浮状态时的父布局、给悬浮布局一个顶部悬浮时的父布局。
2.确定分享评论布局的顶部位置(要悬浮的布局)
3.获取ScrollView滑动的距离。
4.通过滑动距离与分享评论顶部位置的比较,来进行往父布局中移除添加的操作(要先移除在添加)。

这样就实现了悬浮的效果,但是通常在ScrollView中使用ListView就会出现ListView只显示一行的问题。通过下面方法可以给ListView一个刚好显示全部内容的高度。

    public class Utility {  public static void setListViewHeightBasedOnChildren(ListView listView) {  //获取ListView的AdapterListAdapter listAdapter = listView.getAdapter();   if (listAdapter == null) {  // pre-condition  return;  }  int totalHeight = 0;  for (int i = 0; i < listAdapter.getCount(); i++) {  View listItem = listAdapter.getView(i, null, listView);  listItem.measure(0, 0);//获取ListView所以Item高度之和。  totalHeight += listItem.getMeasuredHeight();  }  ViewGroup.LayoutParams params = listView.getLayoutParams();  params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  // listView.getDividerHeight()获取子项间分隔符占用的高度   // params.height最后得到整个ListView完整显示需要的高度 listView.setLayoutParams(params);  }  }  

然后在调用这个方法,参数是相应的ListView对象

ScrollViewSetListViewHeight.setListViewHeightBasedOnChildren(lv_Share_LifeRewardDetail);

顶部悬浮效果大家可以同时参考:Android ScrollView向上滑动控件顶部悬浮效果实现(感谢博主分享)

android开发实现微博正文效果、顶部悬浮、ScrollView嵌套ListView相关推荐

  1. android中ScrollView嵌套ListView或GridView显示位置问题

    Android中ScrollView中嵌套ListView或GridView时在开始进入界面时总是显示中间位置,开头的位置显示不出来.这种情况下只需要在ScrollView的父控件中添加以下两行代码即 ...

  2. android开发分页查询,Android开发中实现分页效果的简单步骤

    分页加载在程序开发中是必备的,但是我们实现这个功能并不仅仅为了美观,用户体验也是很重要的,爱站技术频道下面就带大家了解Android开发中实现分页效果的简单步骤,感兴趣的小伙伴们参考看看吧! 具体内容 ...

  3. Android开发 实现跑马灯效果滚动字幕

    Android开发 实现跑马灯效果滚动字幕 ~! ~ !~ 浙江温州!~ 浙江温州!~江南皮革厂倒闭了! 黄鹤老板欠下了3.5个亿 ! 带着他的小姨子跑了! 我们没有办法 没有办法,拿着钱包抵工资, ...

  4. android解决ScrollView嵌套ListView不能下拉刷新

    为了不误导新人,这篇帖子写的比较早了,这里2016年2月23日21:33:20更新的内容: 千万不要在实际开发中用scrollview嵌套listview\recylerview来处理滑动嵌套,   ...

  5. ScrollView嵌套ListView后,进入页面不从顶部开始显示的问题解决

    ScrollView嵌套ListView后,进入页面不从顶部开始显示的问题解决 首先,正常情况下,如果在ScrollView里嵌套ListView后,会发现ListView只显示1条数据 那么,为了解 ...

  6. 移动开发第二次作业——实现顶部悬浮的滑动列表

    顶部悬浮的滑动列表 一.本项目完成的功能 在上次作业类微信app中的一个可切换页面中实现下述功能: 1.用列表显示若干个英语音乐剧和法语音乐剧,以及它们的剧目名称 2.实现顶部悬浮功能,即向上滑动展示 ...

  7. 50个Android开发人员必备UI效果源码[转载]

    Android 仿微信之主页面实现篇 Android 仿微信之界面导航篇 Android 高仿QQ 好友分组列表 Android 高仿QQ 界面滑动效果 Android 高仿QQ 登陆界面 Andro ...

  8. 50个Android开发人员必备UI效果源码

    2019独角兽企业重金招聘Python工程师标准>>> Android 仿微信之主页面实现篇 Android 仿微信之界面导航篇 Android 高仿QQ 好友分组列表 Androi ...

  9. Android开发之利用动画做出Activity悬浮滑动效果

    老套路看效果: 核心代码就几行: package com.example.firstapp;import android.os.Bundle; import android.view.View; im ...

  10. android音乐进度条设计代码,【Android】Android开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等...

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

最新文章

  1. 数字技术对就业的影响分析
  2. UA MATH523A 实分析3 积分理论例题 证明函数列L1收敛的一个题目
  3. python回归分析预测模型_Python与线性回归模型预测房价
  4. linux的mysql修改用户密码与忘记密码的方法
  5. Ubuntu终端远程连接计算机(Linux)
  6. string’ does not name a type 错误解析
  7. 时间序列与R语言应用(part5)--移动平均MA模型及其可逆性
  8. Berkeley DB作用
  9. swing中模态对话框(setModal(true))和显示对话框(setVisible(true))的编写顺序
  10. 基于角色的权限设计方案
  11. 用java编写程序_用JAVA编写程序
  12. Spring框架帮助文档目录
  13. 《WordPress插件开发手册》目录
  14. php ora01017,建立DBLINK报ORA-01017,ORA-02063
  15. 抖音快手短视频 影视后期制作工具网址大全
  16. Excel 快捷键大全
  17. python爬取豆瓣电影排行榜函数_摆脱剧荒:教你用Python爬取豆瓣电影最新榜单
  18. 5年后端WEB开发者的开机必备软件
  19. 8个 Chatbot 框架介绍
  20. 在Windows中编辑好的汉字文档,上传到Linux下打开乱码问题

热门文章

  1. selenium+python自动化106 - 滑动 iframe 上的滚动条
  2. 理解Andriod 硬件加速
  3. 自带win10的笔记本电脑如何装win7
  4. 忘记数据库密码,修改数据库密码(亲测有效)
  5. 适合做个人博客网站的一套静态页面模板,非常不错哦
  6. 工程量计算专用工具-支持灌注桩、搅拌桩、格构柱
  7. G-sensor概述及常用概念整理【转】
  8. 自适应滤波器(二)NLMS自适应滤波器
  9. Gifox for Mac 1.6.0 优秀的Gif动画录制工具 破解版下载
  10. 使用思博伦Spirent TsetCenter测试RFC 2544(1)_开始 _双极未来