您的位置:首页 > 移动开发 > Android开发

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

2013-07-31 15:57 507 查看
首先看看效果图,最下边有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方法

@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
if (mIsTitleHide) {
title.setVisibility(View.GONE);
} else {

}
mIsAnim = false;
}

@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub

}

@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
title.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"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
android:duration="300"
android:fromYDelta="0"
android:toYDelta="-100%"
android:fillBefore="true"  />

</set>


动画 push_top_out.xml
<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
android:duration="300"
android:fillBefore="true"
android:fromYDelta="-100%"
android:toYDelta="0" />

</set>


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

Demo下载地址:http://download.csdn.net/detail/tuibiansoar/8153269
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: