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

  1. package com.myron.stackview;
  2.  
  3. import java.util.Stack;
  4.  
  5. import android.app.Activity;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.view.animation.Animation;
  10. import android.view.animation.LinearInterpolator;
  11. import android.view.animation.TranslateAnimation;
  12. import android.widget.Button;
  13. import android.widget.ImageView;
  14. import android.widget.LinearLayout;
  15.  
  16. public class StackViewActivity extends Activity {
  17. private Stack<View> mViewStack = new Stack<View>();
  18. private View mCurrentView;
  19. private LinearLayout parent2;
  20. // 动画
  21. private TranslateAnimation mAnimLeftOut;
  22. private TranslateAnimation mAnimRightIn;
  23. private TranslateAnimation mAnimRightOut;
  24. private TranslateAnimation mAnimLeftIn;
  25.  
  26. @Override
  27. public void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29.  
  30. initAnim();
  31. //第一个界面
  32. LinearLayout parent = new LinearLayout(this);
  33. parent.setOrientation(LinearLayout.VERTICAL);
  34. ImageView imageView = new ImageView(this);
  35. imageView.setBackgroundResource(R.drawable.icon);
  36. parent.addView(imageView, -2, -2);
  37. Button btnPush = new Button(this);
  38. btnPush.setId(1);
  39. btnPush.setText("push");
  40. parent.addView(btnPush, -2, -2);
  41. pushView2Stack(parent);
  42. btnPush.setOnClickListener(listener);
  43.  
  44. //第二个界面
  45. parent2 = new LinearLayout(this);
  46. parent2.setOrientation(LinearLayout.VERTICAL);
  47. ImageView imageView2 = new ImageView(this);
  48. imageView2.setBackgroundResource(R.drawable.icon);
  49. parent2.addView(imageView2, -2, -2);
  50. Button btnPop = new Button(this);
  51. btnPop.setId(2);
  52. btnPop.setText("pop");
  53. parent2.addView(btnPop, -2, -2);
  54. btnPop.setOnClickListener(listener);
  55. }
  56.  
  57. private OnClickListener listener = new OnClickListener() {
  58.  
  59. @Override
  60. public void onClick(View v) {
  61. int id = v.getId();
  62. switch (id) {
  63. case 1:
  64. pushView2Stack(parent2);
  65. break;
  66. case 2:
  67. popViewFromStack();
  68. break;
  69.  
  70. default:
  71. break;
  72. }
  73. }
  74. };
  75.  
  76. /**
  77. * 进栈
  78. * @param newView
  79. */
  80. public void pushView2Stack(View newView) {
  81. if (mViewStack.size() > 0) {
  82. View peek = mViewStack.peek();
  83. peek.clearFocus();
  84. peek.startAnimation(mAnimLeftOut);
  85. }
  86. mViewStack.push(newView);
  87. mCurrentView = newView;
  88. setContentView(newView);
  89. newView.requestFocus();
  90. if (mViewStack.size() > 1) {
  91. // 启动动画
  92. newView.startAnimation(mAnimRightIn);
  93. }
  94. }
  95.  
  96. public View popViewFromStack() {
  97. if (mViewStack.size() > 1) {
  98. // 弹出旧ui
  99. View pop = mViewStack.pop();
  100. pop.clearFocus();
  101. // 动画
  102. pop.startAnimation(mAnimRightOut);
  103.  
  104. // 新ui
  105. mCurrentView = mViewStack.peek();
  106. setContentView(mCurrentView);
  107. mCurrentView.requestFocus();
  108. mCurrentView.startAnimation(mAnimLeftIn);
  109. return mCurrentView;
  110. } else {
  111. finish();
  112. return null;
  113. }
  114. }
  115.  
  116. private void initAnim() {
  117. // 左出
  118. mAnimLeftOut = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0,
  119. Animation.RELATIVE_TO_SELF, -1, Animation.RELATIVE_TO_SELF, 0,
  120. Animation.RELATIVE_TO_SELF, 0);
  121. mAnimLeftOut.setDuration(400);
  122. mAnimLeftOut.setFillAfter(true);
  123. mAnimLeftOut.setInterpolator(new LinearInterpolator());
  124.  
  125. // 右进
  126. mAnimRightIn = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1,
  127. Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
  128. Animation.RELATIVE_TO_SELF, 0);
  129. mAnimRightIn.setDuration(400);
  130. mAnimRightIn.setFillAfter(true);
  131. mAnimRightIn.setInterpolator(new LinearInterpolator());
  132.  
  133. // 右出
  134. mAnimRightOut = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0,
  135. Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 0,
  136. Animation.RELATIVE_TO_SELF, 0);
  137. mAnimRightOut.setDuration(400);
  138. mAnimRightOut.setFillAfter(true);
  139. mAnimRightOut.setInterpolator(new LinearInterpolator());
  140.  
  141. // 左进
  142. mAnimLeftIn = new TranslateAnimation(Animation.RELATIVE_TO_SELF, -1,
  143. Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
  144. Animation.RELATIVE_TO_SELF, 0);
  145. mAnimLeftIn.setDuration(400);
  146. mAnimLeftIn.setFillAfter(true);
  147. mAnimLeftIn.setInterpolator(new LinearInterpolator());
  148. }
  149. }

  

出栈入栈动画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. POJ 3204 Ikki's Story I-Road Reconstruction (网络流关键边)

    [题意]给定一个N个节点M条边的网络流,求有多少条边,使得当增其中加任何一个边的容量后,整个网络的流将增加. 挺好的一道题,考察对网络流和增广路的理解. [思路] 首先关键边一定是满流边.那么对于一个 ...

  2. (八)学习MVC之三级联动

    1.新建项目,MVC选择基本模板 2.新建类:Model/Student.cs,数据库信息有三个实体:分别是年级.班级和学生. using System; using System.Collectio ...

  3. unix network programming(3rd)Vol.1 [第13~15章]《读书笔记系列》

    第13章 守护进程和inetd 超级服务器 syslog() daemon_init() setuid() setgid() 第14章 高级IO 标准I/O函数库,支持3种缓冲 缓冲(读写存储设备(硬 ...

  4. UVA 1637 Double Patience

    题意:36张扑克,平分成9摞,两张数字一样的可以拿走,每次随机拿两张,问能拿光的概率. 解法:记忆化搜索,状态压缩.一开始我想在还没拿的时候概率是1,然后往全拿光推···样例过不去···后来觉得推反了 ...

  5. NGINX(一)内存结构

    ngx_buf_t和ngx_chain_t是nginx中操作内存的重要手段, 很多的数据都需要通过这个结构进行保存. 其中ngx_buf_t中保存一块可用内存, ngx_chain_t则是将内存块连接 ...

  6. android studio 使用的一些注意,一些报错的解决方法(原创)

    NDK 编译无法通过 注意看 build.gradle 里面的 有些是 ndk-build windows 上用 ndk-build.cmd Summary: gradle calls ndk-bui ...

  7. selenium Webdriver 截图

    在使用Selenium 做自动化时,有的时候希望失败了进行截图,下面提供一个封装的截图方法,方便使用,代码如下: //只需要传入文件名字即可,而这个名字大家可以直接使用测试的方法名 public vo ...

  8. HDU 1029 Ignatius and the Princess IV DP

    kuangbin 专题 这题,有很多种解法. 第一种: 直接比较每个数出现次数. #include<iostream> #include<string> #include< ...

  9. matlab 函数说明--fspecial

    好吧,这个函数在图像处理中运用得非常广泛,虽然我还是觉得不知道为啥要取这个名字,fspecial的作用如下:         产生一个预定义的2D 滤波器(create a predefined 2D ...

  10. 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇05:二段跳》

    5.二段跳 二段跳概述: 基本跑酷游戏的框架搭建完毕,开发者会根据开发的游戏特性,增设一些额外功能,使游戏具有可玩性性和画面感.下面我们以角色的二段跳为例,来了解在跑酷游戏中增设其它功能的流程.二段跳 ...