出栈入栈动画demo
项目做了一个切换界面动画的功能,用到了出栈入栈的,写了一个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的更多相关文章
- BZOJ1146[CTSC2008]网络管理——出栈入栈序+树状数组套主席树
题目描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条 ...
- BZOJ3772精神污染——可持久化线段树+出栈入栈序
题目描述 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区,是日本西部门户 ...
- BZOJ_3786_星系探索_splay维护出栈入栈序
BZOJ_3786_星系探索_splay维护出栈入栈序 Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为 ...
- BZOJ_2434_[Noi2011]阿狸的打字机_AC自动机+出栈入栈序+树状数组
BZOJ_2434_[Noi2011]阿狸的打字机_AC自动机+出栈入栈序+树状数组 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印 ...
- BZOJ_2819_Nim_树状数组维护出栈入栈序
BZOJ_2819_Nim_树状数组维护出栈入栈序 Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任 ...
- C++中栈的出栈,入栈规则:A,B,C,D,E
考题: 栈底至栈顶一次存放元素 ABCD 在第五个元素E入栈之前 栈中元素可以出栈,则出栈序列可能是_____a d___________. a. ABCED b. DBCEA c. CD ...
- [置顶] 栈/入栈/出栈顺序(c语言)-linux
说明: 1.栈底为高地址,栈顶为低地址. 2.入栈顺序:从右到左. 解释1:栈在内存中的结构 [注:0x00 到 0x04之间间隔4个地址] 入栈:指针先指向0x10,从高地址向低地址方向填数值,最终 ...
- 剑指 Offer 31. 栈的压入、弹出序列 + 入栈顺序和出栈顺序的匹配问题
剑指 Offer 31. 栈的压入.弹出序列 Offer_31 题目详情: 解析: 这里需要使用一个栈来模仿入栈操作. package com.walegarrett.offer; /** * @Au ...
- 5, java数据结构和算法: 栈 , 入栈, 出栈, 正序遍历,,逆序遍历
直接上代码: class ArrayStack{ //用数组模拟栈 int maxSize; int[] stack; int top = -1;//表示栈顶 public ArrayStack(in ...
随机推荐
- 【转】 当程序崩溃的时候怎么办 part-1
转自:http://www.tairan.com/archives/1006 有这样一种情形:当我们正在快乐的致力于我们的app时,并且什么看都是无比顺利,但是突然,坑爹啊,它崩溃了.(悲伤地音乐响起 ...
- WCF学习笔记(一):WCF简介
转:http://www.cnblogs.com/wengyuli/archive/2009/11/04/1595693.html MSDN上关于WCF给出如下注解: 设计 Windows Commu ...
- socket基本操作
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so ...
- 【转】Qt Creator在Windows上的调试器安装与配置
https://www.librehat.com/qt-creator-on-windows-debugger-installation-and-configuration/
- 命令cd
"." 当前目录".." 上一级目录"~" 用户家目录 cd + 回车 回到家目录“-” 上一个工作目录
- office在线预览方案
一.服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览 微软方:利用Office2007以上版本的一个PDF插件SaveAsPDFandXPS.exe可以导出PDF文件,然后再利用免 ...
- [原创]git使用入门
创建git项目并初始化 建立一个新文件夹,然后将该文件夹定义为git项目 Lilis-MacBook-Pro:GitDir lili$ mkdir testgit Lilis-MacBook-Pro: ...
- 大数据架构师基础:hadoop家族,Cloudera产品系列等各种技术
大数据我们都知道hadoop,可是还会各种各样的技术进入我们的视野:Spark,Storm,impala,让我们都反映不过来.为了能够更好的架构大数据项目,这里整理一下,供技术人员,项目经理,架构师选 ...
- 洛谷 P1373 小a和uim之大逃离
2016-05-30 12:31:59 题目链接: P1373 小a和uim之大逃离 题目大意: 一个N*M的带权矩阵,以任意起点开始向右或者向下走,使得奇数步所得权值和与偶数步所得权值和关于K的余数 ...
- -lrt
在编写pthread有关的程序时,编译时老是报"undefined reference to `pthread_create'"的错误,原因是没有链接pthread相关的库,gcc ...