android ListView向上滑动隐藏标题,下拉显示标题栏

转自http://blog.csdn.net/tuibiansoar/article/details/9668857

首先看看效果图,最下边有Demo的下载链接

                

 

              

 

 

 

一、当前的Activity 重写dispatchTouchEvent 方法并且实现AnimationListener接口来达到动画的效果,代码如下:

 

  1.  private boolean mIsTitleHide = false;  
  2.     private boolean mIsAnim = false;  
  3.     private float lastX = 0;  
  4.     private float lastY = 0;  
  5.     @Override  
  6.     public boolean dispatchTouchEvent(MotionEvent event)  
  7.     {  
  8.         super.dispatchTouchEvent(event);  
  9.         if (mIsAnim) {  
  10.             return false;  
  11.         }  
  12.         final int action = event.getAction();  
  13.   
  14.         float x = event.getX();  
  15.         float y = event.getY();  
  16.   
  17.         switch (action) {  
  18.         case MotionEvent.ACTION_DOWN:  
  19.             lastY = y;  
  20.             lastX = x;  
  21.             return false;  
  22.         case MotionEvent.ACTION_MOVE:  
  23.             float dY = Math.abs(y - lastY);  
  24.             float dX = Math.abs(x - lastX);  
  25.             boolean down = y > lastY ? true : false;  
  26.             lastY = y;  
  27.             lastX = x;  
  28.             if (dX < 8 && dY > 8 && !mIsTitleHide && !down) {  
  29.                 Animation anim = AnimationUtils.loadAnimation(  
  30.                         BlogListActivity.this, R.anim.push_top_in);  
  31. //              anim.setFillAfter(true);  
  32.                 anim.setAnimationListener(BlogListActivity.this);  
  33.                 title_content.startAnimation(anim);  
  34.             } else if (dX < 8 && dY > 8 && mIsTitleHide && down) {  
  35.                 Animation anim = AnimationUtils.loadAnimation(  
  36.                     BlogListActivity.this, R.anim.push_top_out);  
  37. //              anim.setFillAfter(true);  
  38.                 anim.setAnimationListener(BlogListActivity.this);  
  39.                 title_content.startAnimation(anim);  
  40.             } else {  
  41.                 return false;  
  42.             }  
  43.             mIsTitleHide = !mIsTitleHide;  
  44.             mIsAnim = true;  
  45.             break;  
  46.         default:  
  47.             return false;  
  48.         }  
  49.         return false;  
  50.     }  

二、重写AnimationListener方法

 

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. @Override  
  2. public void onAnimationEnd(Animation animation) {  
  3.     // TODO Auto-generated method stub  
  4.     if (mIsTitleHide) {  
  5.         title.setVisibility(View.GONE);  
  6.     } else {  
  7.   
  8.     }  
  9.     mIsAnim = false;  
  10. }  
  11.   
  12. @Override  
  13. public void onAnimationRepeat(Animation animation) {  
  14.     // TODO Auto-generated method stub  
  15.   
  16. }  
  17.   
  18. @Override  
  19. public void onAnimationStart(Animation animation) {  
  20.     // TODO Auto-generated method stub  
  21.     title.setVisibility(View.VISIBLE);  
  22.     if (mIsTitleHide) {  
  23.         FrameLayout.LayoutParams lp = (LayoutParams) mlinear_listview  
  24.                 .getLayoutParams();  
  25.         lp.setMargins(0, 0, 0, 0);  
  26.         mlinear_listview.setLayoutParams(lp);  
  27.     } else {  
  28.         FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) title  
  29.                 .getLayoutParams();  
  30.         lp.setMargins(0, 0, 0, 0);  
  31.         title.setLayoutParams(lp);  
  32.         FrameLayout.LayoutParams lp1 = (LayoutParams) mlinear_listview  
  33.                 .getLayoutParams();  
  34.         lp1.setMargins(0,  
  35.                 getResources().getDimensionPixelSize(R.dimen.title_height),  
  36.                 0, 0);  
  37.         mlinear_listview.setLayoutParams(lp1);  
  38.     }  
  39. }  



 

动画 push_top_in.xml

 

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.   
  4.     <translate  
  5.         android:duration="300"  
  6.         android:fromYDelta="0"  
  7.         android:toYDelta="-100%"  
  8.         android:fillBefore="true"  />  
  9.   
  10. </set>  

 

 

动画 push_top_out.xml

  1. <pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.   
  4.     <translate  
  5.         android:duration="300"  
  6.         android:fillBefore="true"  
  7.         android:fromYDelta="-100%"  
  8.         android:toYDelta="0" />  
  9.   
  10. </set>  

 

以上代码就可以实现具体的功能了。

posted on 2015-04-06 15:46  wwicked  阅读(12541)  评论(0编辑  收藏  举报

导航