Android基于TranslateAnimation的动画动态菜单

先请注意,这里的菜单并不是按机器上的MENU出现在那种菜单,而是基于Android SDK提供的android.view.animation.TranslateAnimation(extends android.view.animation.Animation)类实例后附加到一个Layout上使之产生的有动画出现和隐藏效果的菜单。

原理:Layout(菜单)从屏幕内(挨着屏幕边沿,其实并非一定,视需要的初态和末态而定)动态的移动到屏幕外(在外面可以挨着边沿,也可以离远点,这个无所谓了),这样就可以达到动态菜单的效果了。但是由于Animation的一些奇怪特性(setFill**() 函数的作用效果,这个在我使用的某几个Animation当中出现了没有想明白的效果),就暂不理会这个东西了,所以使得我们还需要用上XML属性android:visibility。当Layout(菜单)显示的时候,设置android:visibility="visible",当Layout(菜单)隐藏的时候,设置android:visibility="gone",这里android:visibility可以有3个值,"visible"为可见,"invisible"为不可见但占空间,"gone"为不可见且不占空间(所谓的占不占空间,这个可以自己写个XML来试试就明白了)。

Class TranslateAnimation的使用:Animation有两种定义方法,一种是用Java code,一种是用XML,这里只介绍用code来定义(因为用XML来定义的那种我没用过。。嘿嘿。。)。多的不说,看代码。

这里是TranslateAnimationMenu.java(我在里面还另加入了ScaleAnimation产生的动画,各位朋友可以照着SDK以及程序效果来理解):

package com.TranslateAnimation.Menu;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.LinearLayout;
public class TranslateAnimationMenu extends Activity {
/** Called when the activity is first created. */
//TranslateAnimation showAction, hideAction;
Animation showAction, hideAction;
LinearLayout menu;
Button button;
boolean menuShowed;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
menu = (LinearLayout) findViewById(R.id.menu);
button = (Button) findViewById(R.id.button);
// 这里是TranslateAnimation动画
showAction = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
// 这里是ScaleAnimation动画
//showAction = new ScaleAnimation(
// 1.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f);
showAction.setDuration(500);
// 这里是TranslateAnimation动画
hideAction = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f);
// 这里是ScaleAnimation动画
//hideAction = new ScaleAnimation(
// 1.0f, 1.0f, 1.0f, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f);
hideAction.setDuration(500);
menuShowed = false;
menu.setVisibility(View.GONE);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (menuShowed) {
menuShowed = false;
menu.startAnimation(hideAction);
menu.setVisibility(View.GONE);
}
else {
menuShowed = true;
menu.startAnimation(showAction);
menu.setVisibility(View.VISIBLE);
}
}
});
}
}

这里是main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello" />
<LinearLayout android:id="@+id/menu"
android:layout_height="100px" android:layout_width="fill_parent"
android:layout_alignParentTop="true" android:background="#ffffff">
<TextView android:layout_width="fill_parent"
android:layout_height="fill_parent" android:text="I am a menu"
android:gravity="center" />
</LinearLayout>
<Button android:id="@+id/button" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_alignParentBottom="true"
android:text="Click to show/hide menu" />
</RelativeLayout>

时间: 2025-01-21 06:55:54

Android基于TranslateAnimation的动画动态菜单的相关文章

Android 动态菜单实现实例代码

Android 动态菜单 先上效果图 比较简单,主要就是属性动画的使用和坐标角度的小细节. 实现 实现效果: 图标按照路径一路缩放渐变过来即可. 核心代码 /** * Item开启动画 * * @param btnItem * @param index * @param total * @param radius */ private void btnItemStartAnimator(View btnItem, int index, int total, int radius) { if (b

[译]Constraint Layout 动画 |动态 Constraint |用 Java 实现的 UI(这到底是什么)[第三部分]

本文讲的是[译]Constraint Layout 动画 |动态 Constraint |用 Java 实现的 UI(这到底是什么)[第三部分], 喔,又是新的一天,是时候学些新东西来让今天变得精彩起来了. 各位读者朋友你们好,希望各位一切顺利.我们之前已经在第一部分和 第二部分 中学习了许多关于 Constraint Layout 的新东西.现在是时候学习这个令人惊讶的布局剩下的部分了.这一篇很有可能是关于 Constraint Layout系列的最后一篇文章了. 动机: 写这篇文章的动机和在

我的Android进阶之旅------&amp;gt;Android基于HTTP协议的多线程断点下载器的实现

一.首先写这篇文章之前,要了解实现该Android多线程断点下载器的几个知识点  1.多线程下载的原理,如下图所示 注意:由于Android移动设备和PC机的处理器还是不能相比,所以开辟的子线程建议不要多于5条.当然现在某些高端机子的处理器能力比较强了,就可以多开辟几条子线程. 2.为了实现断点下载,采用数据库方式记录下载的进度,这样当你将该应用退出后,下次点击下载的时候,程序会去查看该下载链接是否存在下载记录,如果存在下载记录就会判断下载的进度,如何从上次下载的进度继续开始下载. 3.特别注意

详解Android Material Design自定义动画的编写_Android

新的动画Api,让你在UI控件里能创建触摸反馈,改变View的状态,切换activity的一系列自定义动画 具体有: 响应View的touch事件的触摸反馈动画 隐藏和显示View的循环展示动画 两个Activity间的切换动画 更自然的曲线运动的动画 使用View的状态更改动画,能改变一个或多个View的属性 在View的状态更改时显示状态列表动画 这些new animations Api,已内置在标准Widget中,如Button.在自定义view时也可使用这些api 动画在Material

Android编程之Animation动画详解_Android

本文实例讲述了Android编程之Animation动画用法.分享给大家供大家参考,具体如下: Animations 一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等,这些效果可以应用在绝大多数的控件中. 二.Animations的分类 Animations从总体上可以分为两大类: 1.Tweened Animations:该类Animations提供了旋转.移动.伸展

Android实现自定义的卫星式菜单(弧形菜单)详解_Android

一.前言 Android 实现卫星式菜单也叫弧形菜单,主要要做的工作如下: 1.动画的处理 2.自定义ViewGroup来实现卫星式菜单View (1)自定义属性        a. 在attrs.xml中定义属性        b. 在布局中使用自定义属性        c. 在自定义View中读取布局文件中的自定义属性 (2)onMeasure 测量 child 即测量主按钮以及菜单项 (3)onLayout 布局 child 即布局主按钮以及菜单项 (4)设置主按钮的选择动画       

Android编程之Animation动画详解

本文实例讲述了Android编程之Animation动画用法.分享给大家供大家参考,具体如下: Animations 一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等,这些效果可以应用在绝大多数的控件中. 二.Animations的分类 Animations从总体上可以分为两大类: 1.Tweened Animations:该类Animations提供了旋转.移动.伸展

Android实现自定义的卫星式菜单(弧形菜单)详解

一.前言 Android 实现卫星式菜单也叫弧形菜单,主要要做的工作如下: 1.动画的处理 2.自定义ViewGroup来实现卫星式菜单View (1)自定义属性 a. 在attrs.xml中定义属性 b. 在布局中使用自定义属性 c. 在自定义View中读取布局文件中的自定义属性 (2)onMeasure 测量 child 即测量主按钮以及菜单项 (3)onLayout 布局 child 即布局主按钮以及菜单项 (4)设置主按钮的选择动画 a.为菜单项menuItem添加平移动画和旋转动画 b

menu.addIntentOptions 添加动态菜单

 android的一个activity可以再选中某项之后按menu键弹出特定的菜单,也就是动态菜单.动态菜单的实现是靠menu类中的addIntentOptions函数实现的,具体的声明如下: int android.view.Menu.addIntentOptions(             int groupId,             int itemId,             int order,             ComponentName caller,