English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Durch das Interface OnTouchListener des Views, um das Gleiten des listView zu überwachen, wird durch Vergleich der Größe der letzten Koordinaten die Gleitrichtung bestimmt, und durch die Gleitrichtung wird bestimmt, ob die entsprechende Anordnung angezeigt oder versteckt werden muss, und dies mit Animationseffekt.
1.Automatische Anzeige und Versteckung der Toolbar
Erste Gelegenheit, HeaderView dem listView hinzuzufügen, um zu verhindern, dass der erste Artikel von der Toolbar verdeckt wird.
View header=new View(this); header.setLayoutParams(new AbsListView.LayoutParams( AbsListView.LayoutParams.MATCH_PARENT, (int)getResources().getDimension(R.dimen.abc_action_bar_default_height_material))); mListView.addHeaderView(header);
//R.dimen.abc_action_bar_default_height_material ist die Höhe des Systems ActionBar
Definieren Sie ein mTouchSlop-Variable, um die geringste Schwenkweite, die das System für erlaubt hält, zu erhalten
mTouchSlop=ViewConfiguration.get(this).getScaledTouchSlop();//Die geringste Schwenkweite, die das System für erlaubt hält
Umschlag des Gleitereignisses
bbsListView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mFirstY=event.getY(); break; case MotionEvent.ACTION_MOVE: mCurrentY=event.getY(); if(mCurrentY-mFirstY>mTouchSlop) direction=0; //listView向下滑动 else if(mFirstY-mCurrentY>mTouchSlop) direction=1; //listView向上滑动 if(direction==1) { if(mShow) { toolbarAnim(1); //隐藏上方的view mShow=!mShow; } } else if(direction==0) { if(!mShow) { toolbarAnim(0); //展示上方的view mShow=!mShow; } } case MotionEvent.ACTION_UP: break; } return false; } }); }
属性动画
protected void toolbarAnim(int flag) { if(set!=null && set.isRunning()) { set.cancel(); } if(flag==0) { mAnimator1=ObjectAnimator.ofFloat(mToolbar, "translationY", linearView.getTranslationY(),0); mAnimator2=ObjectAnimator.ofFloat(mToolbar, "alpha", 0f,1f); } else if(flag==1) { mAnimator1=ObjectAnimator.ofFloat(mToolbar, "translationY", linearView.getTranslationY(),-linearView.getHeight()); mAnimator2=ObjectAnimator.ofFloat(mToolbar, "alpha", 1f,0f); } set=new AnimatorSet(); set.playTogether(mAnimator1,mAnimator2); set.start(); }
//上面为位移还有透明度属性动画
使用的时候theme要用NoActionBar的,不然会引起冲突。同时引入编译
dependencies{ compile fileTree(include: ['*.jar', dir:'libs}} compile 'com.android.support:appcompat-v7:21.0.3' }
2当要隐藏和显示的组件不是toolbar,而是我们自定义的布局myView时,需要注意一些点
(1)布局要用相对布局,让我们自定义的布局悬浮在listView上方。
(2)避免第一个Item被myView遮挡,给listView增加一个HeaderView,此时需要测量myView的高度,要用下面这种方法,把任务post到UI线程中,否则执行会出错。
final View header=new View(this); //给listView增加一个headView,避免第一个item被遮挡 header.post(new Runnable() { public void run() { header.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, myView.getHeight())); } });
其他的与toolbar一样
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
声明:本文内容来源于网络,版权归原作者所有。内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#oldtoolbag.com(在发邮件时,请将#更换为@进行举报,并提供相关证据。一经查实,本站将立即删除涉嫌侵权内容。)