得到ListView的滑动距离来设置上方菜单的透明度变化
来源:互联网 发布:淘宝热卖排行榜 编辑:程序博客网 时间:2024/05/29 11:42
项目中需要实现当界面滑动的时候,菜单栏背景从透明到不透明的变化,其实最简单的实现就是自定义一个ScrollView或者ListView控件,但是因为这个界面有用到PullToRefresh这个布局,并且是PullToRefreshList,所以只能在不改变ListView的情况下去实现,所以我这个情况算是特例吧。
首先界面设置是最上方是一个ViewPager,然后菜单栏是覆盖在这个ViewPager上方,并且透明,这样后面计算高度的时候要记得减去菜单栏本身的高度。
先写一个方法来判断当前ListView滑动到了哪里
/** * 判断是否是第一行 * @return */ private boolean isScroll() { if(mListView.getFirstVisiblePosition() == 1 || mListView.getFirstVisiblePosition() == 0) { return true; } return false; }
mListView.getFirstVisiblePosition()这个方法是得到当前行数,当行数为1的时候,那么肯定是在滑动ViewPager并且ViewPager没有消失,但是当一开始进入界面的时候,mListView.getFirstVisiblePosition()为0,所以判断条件为1或者0时。
再写一个方法来得到高度比例
/** * 得到高度比例 * @return */ private float getScrollY() { View c = mListView.getChildAt(0); if (c == null) { return 0; } int firstVisiblePosition = mListView.getFirstVisiblePosition(); if(firstVisiblePosition == 1 || firstVisiblePosition == 0) { //如果可见的是第一行或第二行,那么开始计算距离比例 float top = c.getTop(); //当第一行已经开始消失的时候,top是为负数的,所以取正 top = Math.abs(top); //48为菜单栏的高度,单位为dp //得到的高度为ViewPager的高度减去菜单栏高度,即为最大可滑动距离 float height = c.getHeight() - dpTopx(48); float y = top / height; return y; }else { return 0; } }
附上dp转px方法:
/** * 获取手机屏幕密度,将dp值转换为px * * @param dpValue * @param activity * @return px */ private int dpTopx(float dpValue) { // 获取手机屏幕密度 final float scale = getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); }
这样,在先判断是否第一行仍然可见的情况下,再将得到的比例进行处理,当第一行,也就是ViewPager不可见之后,不再得到比例,停止了透明度的变化。
mListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if(isScroll()) { float scrollY = getScrollY(); Log.e("scrollY", "" + scrollY); if(scrollY <= 1) { int alpha = (int) (255 * scrollY); mallactivity_toolbar_layout.setBackgroundColor(Color.argb(alpha, 0xfd, 0x91, 0x5b)); } } } });
因为我界面的要求是将菜单栏从透明变为不透明,且一开始一些控件就在上面,所以我修改的是菜单栏的背景从透明变为不透明,控件并不改变。
这样就完成了最简单的一个菜单栏的透明度的改变。
0 0
- 得到ListView的滑动距离来设置上方菜单的透明度变化
- listview得到滑动距离像素的方法
- 设置滑动的距离
- ScrollView向上滑动,改变菜单的透明度
- ListView 滑动Headlayout的动态变化
- 闪屏的使用 并设置透明度的变化
- Viewpager+Fragment滑动更改ListView数据和设置title文字的变化
- Android导航菜单横向左右滑动并和上方的控件实现联动
- 关于ListView的上方如何增加一个Viewpager,实现整体上下滑动
- ListView+TitleBar实现滚动ListView时TitleBar的透明度随之变化
- Android 滑动Toolbar透明度变化
- 移动端页面上下滑动,大小、透明度的变化视觉差异效果切换页面
- Android ListView 滑动的时候数据消失变化
- Android(UI篇) 获取ListView的滑动距离
- android Listview头部带控件滑动距离的判断
- 关于RecyclerView与ListView控件滑动距离的计算方法
- Android 如何提前知道fling velocity的距离、时间 根据滑动距离得到velocity
- android屏幕最上方的浮动菜单
- android studio下,如何减少编译生成的jni动态库的大小。
- 十个书写Node.js REST API的最佳实践(下)
- 使用node.js和bot framework来打造自己的查询机器人
- 实体类
- 实体类
- 得到ListView的滑动距离来设置上方菜单的透明度变化
- tsliib分析
- 学习:基于Google的TensorFlow框架来介绍深度学习
- 哈密顿绕行世界问题
- 76-抽象 unix 域套接字地址
- RTMP 抓包分析
- 次小生成树
- iOS 程序从开发完到上 AppStore 那点事儿
- windows配置openvc3.2.0,java版,python版,C++visual stdio2017版