android ListView向上滑动隐藏标题,下拉显示标题栏
2015-08-21 00:05
621 查看
首先看看效果图,最下边有Demo的下载链接:
一、当前的Activity 重写dispatchTouchEvent 方法并且实现AnimationListener接口来达到动画的效果,代码如下:
[java] view
plaincopy
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方法
[plain] view
plaincopy
@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
[plain] view
plaincopy
<?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
[java] view
plaincopy
<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
一、当前的Activity 重写dispatchTouchEvent 方法并且实现AnimationListener接口来达到动画的效果,代码如下:
[java] view
plaincopy
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方法
[plain] view
plaincopy
@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
[plain] view
plaincopy
<?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
[java] view
plaincopy
<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
相关文章推荐
- [android]无聊写个android的GCDのdispatch_async
- Android在走下坡路吗?
- android listview 连续调用 getview问题分析及解决。
- 时间与日期选择器——Mars Android开发视频之第一季第十六集(重)
- Android开发圆角button的简单实现
- Android BaseAdapter在GridView,ListView,Spinner中的使用
- android---简单的通讯录
- Android内存分析工具(四):adb命令
- android学习之ListView下拉刷新
- Android WiFi 应用程序例子
- 【Android高级】应用开发必须要掌握的框架<Volley>
- Android WiFi系统
- 史上最详细的Android Studio系列教程四--Gradle基础
- Android学习之压缩图片到指定大小
- android studio使用中遇到的问题记录
- Android学习之Bitmap对象与字节数组相互转换
- Android学习之利用BitmapFactory工厂压缩图片
- Android WebView与JavaScript交互操作(Demo)
- Android学习之保存Bitmap到指定文件夹
- Android:发短信Demo