先上效果:
两个动画文件:
footer_appear.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:interpolator="@android:anim/decelerate_interpolator"
android:fromYDelta="+12%p"
android:toYDelta="0"
android:duration="300" />
</set>
footer_disappear.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:interpolator="@android:anim/decelerate_interpolator"
android:fromYDelta="0"
android:toYDelta="+12%p"
android:duration="300" />
</set>
其中translate表示移动动画;android:fromYDelta表示Y轴从哪里开始,android:toYDelta表示Y轴从哪里结束,这里可以使用百分比,也可以使用数值;duration表示动画从哪里到哪里的持续时间
布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/click"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="点击"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:orientation="horizontal"
android:paddingTop="5dp"
android:paddingLeft="4dp"
android:paddingRight="1dp"
android:background="@android:drawable/bottom_bar"
android:layout_alignParentBottom="true"
android:id="@+id/selection_menu"
>
<Button
android:id="@+id/selection_delete"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="删除"
/>
<Button
android:id="@+id/deselect_all"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="撤销"
/>
</LinearLayout>
</RelativeLayout>
为了演示方便,text文字就直接写在布局文件中了。
主文件中最重要的一段
if(View.GONE == mSelectionMenuView.getVisibility()){
mSelectionMenuView.setVisibility(View.VISIBLE);
mSelectionMenuView.startAnimation(
AnimationUtils.loadAnimation(this, R.anim.footer_appear));
} else {
mSelectionMenuView.setVisibility(View.GONE);
mSelectionMenuView.startAnimation(
AnimationUtils.loadAnimation(this, R.anim.footer_disappear));
}
其他就是初始化之类的,这一段放在onClick方法中,判断一下如果button id是上面那一个点击按钮,就执行。
X方向上的移动
出现:
android:fromXDelta="-100%p"
android:toXDelta="0"
消失:
android:fromXDelta="0"
android:toXDelta="+100%p"
部分原理可以参考:http://www.oschina.net/question/97118_34343
也可以试试Y方向上的
出现:
android:fromYDelta="-100%p"
android:toYDelta="0"
消失:
android:fromYDelta="0"
android:toYDelta="+100%p"
很有意思。
动画非常重要的一点就是:它只是实现既定布局的效果。比如说移动效果,只是看起来从某一个地方移动到另外一个地方
其实在代码中只是现实和隐藏组件,加了点动画。
功能从断点下载开源项目com.mozillaonline.downloadprovider移植,算是转帖吧。