出栈入栈动画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 ...
随机推荐
- POJ 3204 Ikki's Story I-Road Reconstruction (网络流关键边)
[题意]给定一个N个节点M条边的网络流,求有多少条边,使得当增其中加任何一个边的容量后,整个网络的流将增加. 挺好的一道题,考察对网络流和增广路的理解. [思路] 首先关键边一定是满流边.那么对于一个 ...
- (八)学习MVC之三级联动
1.新建项目,MVC选择基本模板 2.新建类:Model/Student.cs,数据库信息有三个实体:分别是年级.班级和学生. using System; using System.Collectio ...
- unix network programming(3rd)Vol.1 [第13~15章]《读书笔记系列》
第13章 守护进程和inetd 超级服务器 syslog() daemon_init() setuid() setgid() 第14章 高级IO 标准I/O函数库,支持3种缓冲 缓冲(读写存储设备(硬 ...
- UVA 1637 Double Patience
题意:36张扑克,平分成9摞,两张数字一样的可以拿走,每次随机拿两张,问能拿光的概率. 解法:记忆化搜索,状态压缩.一开始我想在还没拿的时候概率是1,然后往全拿光推···样例过不去···后来觉得推反了 ...
- NGINX(一)内存结构
ngx_buf_t和ngx_chain_t是nginx中操作内存的重要手段, 很多的数据都需要通过这个结构进行保存. 其中ngx_buf_t中保存一块可用内存, ngx_chain_t则是将内存块连接 ...
- android studio 使用的一些注意,一些报错的解决方法(原创)
NDK 编译无法通过 注意看 build.gradle 里面的 有些是 ndk-build windows 上用 ndk-build.cmd Summary: gradle calls ndk-bui ...
- selenium Webdriver 截图
在使用Selenium 做自动化时,有的时候希望失败了进行截图,下面提供一个封装的截图方法,方便使用,代码如下: //只需要传入文件名字即可,而这个名字大家可以直接使用测试的方法名 public vo ...
- HDU 1029 Ignatius and the Princess IV DP
kuangbin 专题 这题,有很多种解法. 第一种: 直接比较每个数出现次数. #include<iostream> #include<string> #include< ...
- matlab 函数说明--fspecial
好吧,这个函数在图像处理中运用得非常广泛,虽然我还是觉得不知道为啥要取这个名字,fspecial的作用如下: 产生一个预定义的2D 滤波器(create a predefined 2D ...
- 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇05:二段跳》
5.二段跳 二段跳概述: 基本跑酷游戏的框架搭建完毕,开发者会根据开发的游戏特性,增设一些额外功能,使游戏具有可玩性性和画面感.下面我们以角色的二段跳为例,来了解在跑酷游戏中增设其它功能的流程.二段跳 ...