跟随ListView滑动而变化的标题栏

ScrollviewWithToolbar.gif

最近遇到这样的需求,一开始自己写出来,总是会有跳顿感,不是那么流畅,去网上查了下,在加上自己修改了下,便成了现在的样子。(滑动过程中上面的图片是缩放的,里面的一个小icon是缩小放大透明度渐变的,真机加Vysor,看的效果特别模糊的,没入Vysor pro,这画质将就看吧)

当然应该还可以继续优化吧,不过最近比较忙,暂时先这样吧。

为了以后方便自己整理学习,先写到简书吧。

首先初始化一些基本的参数

privatevoidinitDistance(){//这是顶部标题栏的初始高度;OrignHight = layout.getLayoutParams().height;//给它设定个上拉的最小高度;minHight = px2dp(100);//需要滑动的距离;Distance = OrignHight - minHight; }

判断ListView是否滑动到顶部;

publicbooleanisListViewReachTopEdge(ListView listView){booleanresult =false;if(listView.getFirstVisiblePosition() ==0){            View childAt = listView.getChildAt(0);            result = childAt.getTop()==0;      }returnresult;}

下面的是对touchevent的处理

@OverridepublicbooleandispatchTouchEvent(MotionEvent ev){//如果ListView是在顶部,进行处理,不在顶部,不执行    if(isListViewReachTopEdge(listView)){inty = (int) ev.getY();intdistanceY =0;switch(ev.getAction()) {caseMotionEvent.ACTION_DOWN:                    pointY = y;                        afterup =false;returnsuper.dispatchTouchEvent(ev);caseMotionEvent.ACTION_MOVE:                y = (int) ev.getY();if(currentDistance >= Distance && distanceY >0) {returnsuper.dispatchTouchEvent(ev);                        }if(currentDistance <=0&& distanceY <0) {returnsuper.dispatchTouchEvent(ev);                        }                        distanceY = pointY - y;if(rate ==1) {if(distanceY >0) {returnsuper.dispatchTouchEvent(ev);                              }                        }                        moveLayout(distanceY);                        pointY = y;break;caseMotionEvent.ACTION_UP:                        afterup =true;                        elasticityHeight();returnsuper.dispatchTouchEvent(ev);              }      }else{returnsuper.dispatchTouchEvent(ev);        }returnfalse;}```接下来就是里面用的各种方法```java//滑动过程中的处理privatevoidmoveLayout(intdistanceY){    ViewGroup.LayoutParams layoutParams = layout.getLayoutParams();    layoutParams.height = layoutParams.height - distanceY;    layout.setLayoutParams(layoutParams);    elasticityHeight();      layout.requestLayout();    currentDistance = OrignHight - layout.getLayoutParams().height;    rate = (float) (currentDistance *1.0/ Distance);    moveViewByrate(rate);}

//抬手后进行的处理privatevoidelasticityHeight(){    ViewGroup.LayoutParams layoutParams = layout.getLayoutParams();if(layoutParams.height < minHight) {        layoutParams.height = minHight;        layout.setLayoutParams(layoutParams);        layout.requestLayout();    }if(layoutParams.height > OrignHight) {        layoutParams.height = OrignHight;        layout.setLayoutParams(layoutParams);        layout.requestLayout();    }if(afterup) {if(layoutParams.height < OrignHight /1.8) {            layoutParams.height = minHight;            layout.setLayoutParams(layoutParams);            imageView.setVisibility(View.GONE);            layout.requestLayout();        }if(layoutParams.height >= OrignHight /1.8) {            layoutParams.height = OrignHight;            layout.setLayoutParams(layoutParams);            imageView.setVisibility(View.VISIBLE);            imageView.setAlpha((float)1.0-0);            imageView.setScaleX(1);            imageView.setScaleY(1);            layout.requestLayout();        }    }}

//滑动过程中,控件的大小,透明度的变化privatevoidmoveViewByrate(floatrate){if(rate >=1) {            imageView.setVisibility(View.GONE);        }else{            imageView.setVisibility(View.VISIBLE);            imageView.setAlpha(1- rate);            imageView.setScaleX(1- rate);            imageView.setScaleY(1- rate);        }}

文章中有部分是转载自网络,在这里说声抱歉。

因为时间仓促,里面可能有些错误,希望指正。

作者:一脸懵逼的大林子

链接:https://www.jianshu.com/p/56b78a948ded

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容