总结今天实现Topbar随屏幕滚动逐渐出现和淡出问题
来源:互联网 发布:企业it 运维 知乎 编辑:程序博客网 时间:2024/05/21 10:21
实现场景:
在开发过程中,需要实现初始界面Topbar不显示,当屏幕向下滚动时,Topbar逐步淡现,当屏幕向上滚动时,Topbar逐步淡出和手指向上向下抛动时Topbar对应出现和消失的效果.
代码例子使用ListView控件h_rmnr_list
在xml文件中将自定义的Topbar的透明度设置为0 android:alpha="0"
绑定控件mListView,准备好数据之后为mListView实现以下两个事件,直接上代码:
<pre style="font-family: 宋体; background-color: rgb(255, 255, 255);"><span style="font-size:18px;"><span style="color: rgb(0, 0, 128); "><strong>private float </strong></span><span style="color: rgb(102, 14, 122); "><strong>downY</strong></span>=<span style="color: rgb(0, 0, 255);">0</span>; <span style="color: rgb(128, 128, 128); "><em>//手指点击点的Y轴坐标</em></span><span style="color: rgb(0, 0, 128); "><strong>private float </strong></span><span style="color: rgb(102, 14, 122); "><strong>currentY</strong></span>=<span style="color: rgb(0, 0, 255);">0</span>; <span style="color: rgb(128, 128, 128); "><em>//手指离开点的Y轴坐标</em></span><span style="color: rgb(0, 0, 128); "><strong>private float </strong></span><span style="color: rgb(102, 14, 122); "><strong>dminusc</strong></span>=<span style="color: rgb(0, 0, 255);">0</span>; <span style="color: rgb(128, 128, 128); "><em>//上俩值相减</em></span></span>
private void initeEvent() { h_rmnr_list.setOnTouchListener(new View.OnTouchListener() { //监听触控事件 @Override public boolean onTouch(View v, MotionEvent event) { float rate=1f/300; //设置比例标准 理想情况是手指在屏幕划过的长度为300时 透明度由0到1 switch (event.getAction()){ case MotionEvent.ACTION_DOWN: //单点触控动作 downY=event.getRawY(); //获取触控Y轴坐标 break; case MotionEvent.ACTION_MOVE: //触控点移动动作 currentY=event.getRawY(); //实时获取触控点坐标 if(topbar.getAlpha()!=1){ //如果topbar已经不为透明 避免二次由向下滚动时再度改变Topbar的透明度 if(downY>currentY&&(downY-currentY)<301){ //向下滚动的情况 dminusc=downY-currentY; //获取起始触控点的Y轴差值 if(rate*dminusc>0.85){ //rate*dminusc无法达到取得1的转态 扩大透明度设为1的达标范围 topbar.setAlpha(1); //将透明度设为1 }else if (rate*dminusc<0.15){ //向下滚动距离过小时 恢复透明转态 topbar.setAlpha(0); }else{ topbar.setAlpha(dminusc*rate); //中间透明度变化设置 } } } if(topbar.getAlpha()==1){ //如果topbar目前为可视转态 才有必要进行向上滚动时隐藏topbar if(downY<currentY&&(currentY-downY)<300){ //向上滚动情况 dminusc=currentY-downY; //获取起始触控点的Y轴差值 if(rate*dminusc>0.85){ //rate*dminusc无法达到取得0的转态 扩大透明度设为0的达标范围 topbar.setAlpha(0); }else if (rate*dminusc<0.15){ //向上滚动距离过小时 恢复可视转态 topbar.setAlpha(1); }else{ topbar.setAlpha(1-dminusc*rate); //中间透明度变化设置 } } } break; case MotionEvent.ACTION_UP: //单点触控离开动作 //为了避免出现透明度停留在o和1之间的情况出现 if(rate*dminusc>0.5||rate*dminusc==0.5){ topbar.setAlpha(1); }else if(rate*dminusc<0.5){ topbar.setAlpha(0); } break; } return false; } }); h_rmnr_list.setOnScrollListener(new AbsListView.OnScrollListener() { //监听滑动事件 @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if(scrollState== AbsListView.OnScrollListener.SCROLL_STATE_FLING){ //出现手指抛动事件时调用 if(downY>currentY){ //手指向上抛动 即屏幕向下滚动时调用 直接将topbar设置为可视 topbar.setAlpha(1); }else { //手指向下抛动 即屏幕向上滚动时调用 直接将topbar设置为透明 topbar.setAlpha(0); } } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //滚动过程一直会调用的方法 } });}
0 0
- 总结今天实现Topbar随屏幕滚动逐渐出现和淡出问题
- 顶部标题栏在页面滚动后逐渐淡出
- jquery 滚动条 scroll 和 animate出现的问题总结
- Unity实现物体逐渐消失(逐渐出现)
- 新闻播报/滚动和淡入淡出
- 屏幕滚动实现(收藏)
- 滚动屏幕的实现
- IOS实现屏幕滚动
- 实现屏幕自动滚动
- 代码实现屏幕滚动!
- 今天晚上弄明白了逻辑坐标和设备坐标,并且能够滚动屏幕查看
- ScrollView控件实现屏幕滚动
- 随屏幕滚动
- topbar
- Topbar
- topbar
- TopBar
- 今天的问题总结
- Zhou_Zy's OI life.
- js定时显示广告代码
- .NonUniqueObjectException: a different object with the same identifier等的解决
- Java中List集合的遍历
- Java JDBC 之 Statement
- 总结今天实现Topbar随屏幕滚动逐渐出现和淡出问题
- Html 链接
- ZigZag Conversion
- 排版——螺旋打印
- 一个月实验室网站和PMS系统、邮件系统、FTP服务器搭建
- 初识Java多线程编程
- 线程的生命周期
- Oracle分页以及与MySql的比较
- SQL--JOIN之完全用法