android ListView向上滑动隐藏标题,下拉显示标题栏
16lz
2021-01-26
首先看看效果图,最下边有Demo的下载链接:
一、当前的Activity 重写dispatchTouchEvent 方法并且实现AnimationListener接口来达到动画的效果,代码如下:
private boolean mIsTitleHide = false; private boolean mIsAnim = false; private float lastX = 0; private float lastY = 0; @Override public boolean dispatchTouchEvent(MotionEvent event) { super.dispatchTouchEvent(event); if (mIsAnim) { return false; } final int action = event.getAction(); float x = event.getX(); float y = event.getY(); switch (action) { case MotionEvent.ACTION_DOWN: lastY = y; lastX = x; return false; case MotionEvent.ACTION_MOVE: float dY = Math.abs(y - lastY); float dX = Math.abs(x - lastX); boolean down = y > lastY ? true : false; lastY = y; lastX = x; if (dX < 8 && dY > 8 && !mIsTitleHide && !down) { Animation anim = AnimationUtils.loadAnimation( BlogListActivity.this, R.anim.push_top_in);// anim.setFillAfter(true); anim.setAnimationListener(BlogListActivity.this); title_content.startAnimation(anim); } else if (dX < 8 && dY > 8 && mIsTitleHide && down) { Animation anim = AnimationUtils.loadAnimation( BlogListActivity.this, R.anim.push_top_out);// anim.setFillAfter(true); anim.setAnimationListener(BlogListActivity.this); title_content.startAnimation(anim); } else { return false; } mIsTitleHide = !mIsTitleHide; mIsAnim = true; break; default: return false; } return false; }
二、重写AnimationListener方法
@Overridepublic void onAnimationEnd(Animation animation) {// TODO Auto-generated method stubif (mIsTitleHide) {title.setVisibility(View.GONE);} else {}mIsAnim = false;}@Overridepublic void onAnimationRepeat(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationStart(Animation animation) {// TODO Auto-generated method stubtitle.setVisibility(View.VISIBLE);if (mIsTitleHide) {FrameLayout.LayoutParams lp = (LayoutParams) mlinear_listview.getLayoutParams();lp.setMargins(0, 0, 0, 0);mlinear_listview.setLayoutParams(lp);} else {FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) title.getLayoutParams();lp.setMargins(0, 0, 0, 0);title.setLayoutParams(lp);FrameLayout.LayoutParams lp1 = (LayoutParams) mlinear_listview.getLayoutParams();lp1.setMargins(0,getResources().getDimensionPixelSize(R.dimen.title_height),0, 0);mlinear_listview.setLayoutParams(lp1);}}
动画 push_top_in.xml
<?xml version="1.0" encoding="utf-8"?>
动画 push_top_out.xml
<?xml version="1.0" encoding="utf-8"?>
以上代码就可以实现具体的功能了。
Demo下载地址:http://download.csdn.net/detail/tuibiansoar/8153269
更多相关文章
- 谈中型项目下的编码技巧二
- Android(安卓)listview多类型item问题
- 如何让Activity以全屏方式显示
- Android(安卓)Weekly Notes Issue #251
- android 在应用中安装其他程序
- 浅析Android中的visibility属性
- android ActivityGroup认识
- android 内置的短信等调用代码
- Android实现异步加载图片 ListView