项目做了一个切换界面动画的功能,用到了出栈入栈的,写了一个demo

package com.myron.stackview;

import java.util.Stack;

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.LinearInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout; public class StackViewActivity extends Activity {
private Stack<View> mViewStack = new Stack<View>();
private View mCurrentView;
private LinearLayout parent2;
// 动画
private TranslateAnimation mAnimLeftOut;
private TranslateAnimation mAnimRightIn;
private TranslateAnimation mAnimRightOut;
private TranslateAnimation mAnimLeftIn; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); initAnim();
//第一个界面
LinearLayout parent = new LinearLayout(this);
parent.setOrientation(LinearLayout.VERTICAL);
ImageView imageView = new ImageView(this);
imageView.setBackgroundResource(R.drawable.icon);
parent.addView(imageView, -2, -2);
Button btnPush = new Button(this);
btnPush.setId(1);
btnPush.setText("push");
parent.addView(btnPush, -2, -2);
pushView2Stack(parent);
btnPush.setOnClickListener(listener); //第二个界面
parent2 = new LinearLayout(this);
parent2.setOrientation(LinearLayout.VERTICAL);
ImageView imageView2 = new ImageView(this);
imageView2.setBackgroundResource(R.drawable.icon);
parent2.addView(imageView2, -2, -2);
Button btnPop = new Button(this);
btnPop.setId(2);
btnPop.setText("pop");
parent2.addView(btnPop, -2, -2);
btnPop.setOnClickListener(listener);
} private OnClickListener listener = new OnClickListener() { @Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case 1:
pushView2Stack(parent2);
break;
case 2:
popViewFromStack();
break; default:
break;
}
}
}; /**
* 进栈
* @param newView
*/
public void pushView2Stack(View newView) {
if (mViewStack.size() > 0) {
View peek = mViewStack.peek();
peek.clearFocus();
peek.startAnimation(mAnimLeftOut);
}
mViewStack.push(newView);
mCurrentView = newView;
setContentView(newView);
newView.requestFocus();
if (mViewStack.size() > 1) {
// 启动动画
newView.startAnimation(mAnimRightIn);
}
} public View popViewFromStack() {
if (mViewStack.size() > 1) {
// 弹出旧ui
View pop = mViewStack.pop();
pop.clearFocus();
// 动画
pop.startAnimation(mAnimRightOut); // 新ui
mCurrentView = mViewStack.peek();
setContentView(mCurrentView);
mCurrentView.requestFocus();
mCurrentView.startAnimation(mAnimLeftIn);
return mCurrentView;
} else {
finish();
return null;
}
} private void initAnim() {
// 左出
mAnimLeftOut = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, -1, Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0);
mAnimLeftOut.setDuration(400);
mAnimLeftOut.setFillAfter(true);
mAnimLeftOut.setInterpolator(new LinearInterpolator()); // 右进
mAnimRightIn = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1,
Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0);
mAnimRightIn.setDuration(400);
mAnimRightIn.setFillAfter(true);
mAnimRightIn.setInterpolator(new LinearInterpolator()); // 右出
mAnimRightOut = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0);
mAnimRightOut.setDuration(400);
mAnimRightOut.setFillAfter(true);
mAnimRightOut.setInterpolator(new LinearInterpolator()); // 左进
mAnimLeftIn = new TranslateAnimation(Animation.RELATIVE_TO_SELF, -1,
Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0);
mAnimLeftIn.setDuration(400);
mAnimLeftIn.setFillAfter(true);
mAnimLeftIn.setInterpolator(new LinearInterpolator());
}
}

  

出栈入栈动画demo的更多相关文章

  1. BZOJ1146[CTSC2008]网络管理——出栈入栈序+树状数组套主席树

    题目描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条 ...

  2. BZOJ3772精神污染——可持久化线段树+出栈入栈序

    题目描述 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区,是日本西部门户 ...

  3. BZOJ_3786_星系探索_splay维护出栈入栈序

    BZOJ_3786_星系探索_splay维护出栈入栈序 Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为 ...

  4. BZOJ_2434_[Noi2011]阿狸的打字机_AC自动机+出栈入栈序+树状数组

    BZOJ_2434_[Noi2011]阿狸的打字机_AC自动机+出栈入栈序+树状数组 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印 ...

  5. BZOJ_2819_Nim_树状数组维护出栈入栈序

    BZOJ_2819_Nim_树状数组维护出栈入栈序 Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任 ...

  6. C++中栈的出栈,入栈规则:A,B,C,D,E

    考题: 栈底至栈顶一次存放元素 ABCD 在第五个元素E入栈之前  栈中元素可以出栈,则出栈序列可能是_____a d___________. a.  ABCED b.  DBCEA   c.  CD ...

  7. [置顶] 栈/入栈/出栈顺序(c语言)-linux

    说明: 1.栈底为高地址,栈顶为低地址. 2.入栈顺序:从右到左. 解释1:栈在内存中的结构 [注:0x00 到 0x04之间间隔4个地址] 入栈:指针先指向0x10,从高地址向低地址方向填数值,最终 ...

  8. 剑指 Offer 31. 栈的压入、弹出序列 + 入栈顺序和出栈顺序的匹配问题

    剑指 Offer 31. 栈的压入.弹出序列 Offer_31 题目详情: 解析: 这里需要使用一个栈来模仿入栈操作. package com.walegarrett.offer; /** * @Au ...

  9. 5, java数据结构和算法: 栈 , 入栈, 出栈, 正序遍历,,逆序遍历

    直接上代码: class ArrayStack{ //用数组模拟栈 int maxSize; int[] stack; int top = -1;//表示栈顶 public ArrayStack(in ...

随机推荐

  1. varchar与nvarchar的区别

    nvarchar可变长度的Unicode字符数据 varchar可变长度且非 Unicode 的字符数据 举例: varchar(1)   --可以插进入一个数字或者一个字母,如果要插入一个汉字改为v ...

  2. oracle静态与动态监听

    在运行lsnrctl命令的status时,常会看到如下返回值: 服务“test”包含1个例程.    例程"mydata",状态 UNKOWN,包含此服务的一个处理程序... 服务 ...

  3. 【转】iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)-- 不错

    原文网址:http://www.cnblogs.com/JuneWang/p/3850859.html iOS页面间传值的方式(NSUserDefault/Delegate/NSNotificatio ...

  4. 设计模式_Visitor_访问者模式

    形象例子: 情人节到了,要给每个MM送一束鲜花和一张卡片,可是每个MM送的花都要针 对她个人的特点,每张卡片也要根据个人的特点来挑,我一个人哪搞得清楚,还是找花店老板和礼品店老板做一下Visitor, ...

  5. 【译】 AWK教程指南 附录B-Actions

    Actions 是由下列指令(statement)所组成: 表达式 ( 函数调用,赋值...) print 表达式列表 printf( 格式化字符串, 表达式列表) if( 表达式 ) 语句 [els ...

  6. 问题:关于坛友的一个js轮播效果的实现

    需求:点击向前按钮进行向前翻页,向后按钮进行向后翻页,点击中间蓝色小圆圈可以来回自由切换 我的大概思路:先默认显示一个div  然后在原位置在隐藏一个div   给按钮添加click事件,转到下一个时 ...

  7. 分享两个模拟get和post方法的工具类,让应用能够与服务器进行数据交互

    很久没有码字了,今天跟大家分享一个模拟get和post方法的工具类,在安卓应用中很多都需要跟服务器进行数据交互,这需要两方面的配合,首先服务器端会给应用提供一些数据交互的接口,可是怎样在应用中去调用呢 ...

  8. LightOJ 1422 Halloween Costumes

    dp[i]][j]=min(dp[i+1][j]+1,dp[i+1][k-1]+dp[k][j]) 表示第i天到j的最小数量.如果第i天的衣服只自己穿的话,不考虑后面的就是dp[i][j]=dp[i+ ...

  9. uva 2218 Triathlon

    题意:铁人三项赛,给定每个选手游泳,自行车,赛跑三个阶段的平均速度,不知道每段比赛的路程,询问当前这个选手能否胜利. 思路:把题意转化为一个不等式,设比赛长度是1,如果i要战胜j,x.y分别是第一阶段 ...

  10. phpMyAdmin导入本地数据库

    phpMyAdmin导入本地数据库 在PHPMyAdmin导入数据时,点击导入--执行后出现错误: 您可能正在上传很大的文件,请参考文档来寻找解决方法. 可能就是因为数据库太大的原因. 那么如何 才能 ...