首先看看效果图,最下边有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.youkuaiyun.com/detail/tuibiansoar/8153269
本文介绍了一种通过触摸事件实现动画效果切换的实现方法,包括触摸开始、移动和结束时的逻辑处理,以及动画监听器的使用。通过定义两个动画资源文件(push_top_in.xml 和 push_top_out.xml),实现了当用户触摸屏幕时,标题栏的隐藏和显示效果。代码示例清晰展示了如何在Android应用中实现这一功能。
1503

被折叠的 条评论
为什么被折叠?



