一个activity 切换中的多个View怎么切换

多个Activity跳转的小结 - 自己的一个备忘录 - ITeye技术网站
博客分类:
转载请注明出处
在android开发中Activity相当于web开发的页面,或者说如j2ee开发中对应的jsp页面。在开发jsp时,经常会遇到页面跳转的问题,在android也同样会遇到。以下的几个例子是我对android的Activity跳转的小结,也是最近做项目的小结。
第一个例子:demo1
Main—&SecondActivity—&Main
从流程上看就是从Main跳转到SecondActivity,再从SecondActivity返回到Main。也就是将子Activity的数据返回给父Activity。
代码如下:
public class Main extends Activity {
private TextView request_
private final int FIRST_REQUEST_CODE = 1;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
request_text = (TextView)this.findViewById(R.id.request_text);
btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Main.this,SecondActivity.class);
i.putExtra("request_text_for_main", "从Main传递到SecondActivity");
startActivityForResult(i, FIRST_REQUEST_CODE);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_OK){
if(data != null) {
request_text.setText(data.getStringExtra("request"));
public class SecondActivity extends Activity{
private TextView request_
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
request_text = (TextView)this.findViewById(R.id.request_text);
if (getIntent().getStringExtra("request_text_for_main") != null) {
text = getIntent().getStringExtra("request_text_for_main");
request_text.setText(text);
btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent();
i.putExtra("request",text+"\n"+"从SecondActivity传递到ThirdActivity");
setResult(Activity.RESULT_OK,i);
图一所示是demo初始化的样子,点击“第一次跳转”进入图二。
图二
图二显示从Main到SecondActivity这个过程,再点击“第二次跳转”即返回Main这个Activity。
图三
图三表示跳转结束,Button按钮上面的文字记录跳转的过程。
这个例子最主要是第一个Activity Main设置的onActivityResult()方法和startActivityForResult()方法。
在Main中通过startActivityForResult()调用SecondActivity,然后在onActivityResult()中获取其返回参数,或者说通过onActivityResult()进行回调。
SecondActivity中要返回第一个Main必须:
setResult(Activity.RESULT_OK,i);
finish();
第二个例子:demo2
Main—&SecondActivity—&ThirdActivity—&Main
这个例子的流程,比上一个更复杂一些,经历了3个Activity,最好跳转回第一个Activity。
代码如下:
public class Main extends Activity {
private TextView request_
private final int FIRST_REQUEST_CODE = 1;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
request_text = (TextView)this.findViewById(R.id.request_text);
btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Main.this,SecondActivity.class);
i.putExtra("request_text_for_main", "从Main传递到SecondActivity");
startActivityForResult(i, FIRST_REQUEST_CODE);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_FIRST_USER){
if(data != null) {
request_text.setText(data.getStringExtra("request_text_for_third"));
public class SecondActivity extends Activity{
private TextView request_
private final int SECOND_REQUEST_CODE = 2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
request_text = (TextView)this.findViewById(R.id.request_text);
if (getIntent().getStringExtra("request_text_for_main") != null) {
text = getIntent().getStringExtra("request_text_for_main");
request_text.setText(text);
btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(SecondActivity.this,ThirdActivity.class);
i.putExtra("request_text_for_second", text+"\n"+"从SecondActivity传递到ThirdActivity");
startActivityForResult(i, SECOND_REQUEST_CODE);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==SECOND_REQUEST_CODE && data != null){
setResult(Activity.RESULT_FIRST_USER, data);
public class ThirdActivity extends Activity{
private TextView request_
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.third);
text = getIntent().getStringExtra("request_text_for_second");
request_text = (TextView)this.findViewById(R.id.request_text);
request_text.setText(text);
btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent();
i.putExtra("request_text_for_third", text+"\n"+"从ThirdActivity再次传递到Main");
setResult(Activity.RESULT_FIRST_USER, i);
这个demo2比起前面的demo1的不同之处在于就是通过ThirdActivity进行跳转到Main。
在代码上的区别是:
(1)Main的onActivityResult()方法中,它的resultCode==Activity.RESULT_FIRST_USER而不是前面的resultCode==Activity.RESULT_OK
(2)SecondActivity中增加了onActivityResult()方法,该方法是用于回调ThirdActivity,并且该方法执行了跳转过程跳转到Main这个Activity。
(3) ThirdActivity和demo1的SecondActivity很类似。
第三个例子:demo3
Main—&SecondActivity—&ThirdActivity—&SecondActivity—&Main
这个过程看起来复杂,其实不然,最后一步是借助SecondActivity的另一个Button实现的。
代码如下:
public class Main extends Activity {
private TextView request_
private final int FIRST_REQUEST_CODE = 1;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
request_text = (TextView)this.findViewById(R.id.request_text);
btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Main.this,SecondActivity.class);
i.putExtra("request_text_for_main", "从Main传递到SecondActivity");
startActivityForResult(i, FIRST_REQUEST_CODE);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_FIRST_USER){
if(data != null) {
request_text.setText(data.getStringExtra("final_request"));
public class SecondActivity extends Activity{
private TextView request_
private Button btn,finalB
private final int SECOND_REQUEST_CODE = 2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
request_text = (TextView)this.findViewById(R.id.request_text);
if (getIntent().getStringExtra("request_text_for_main") != null) {
text = getIntent().getStringExtra("request_text_for_main");
request_text.setText(text);
btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(SecondActivity.this,ThirdActivity.class);
i.putExtra("request_text_for_second", text+"\n"+"从SecondActivity传递到ThirdActivity");
startActivityForResult(i, SECOND_REQUEST_CODE);
finalBtn = (Button)this.findViewById(R.id.finalBtn);
finalBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent();
i.putExtra("final_request", text+"\n"+"从SecondActivity最后传递到Main");
setResult(Activity.RESULT_FIRST_USER,i);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==SECOND_REQUEST_CODE && resultCode==Activity.RESULT_OK){
if(data != null) {
text = data.getStringExtra("request_text_for_third");
request_text.setText(text);
public class ThirdActivity extends Activity{
private TextView request_
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.third);
text = getIntent().getStringExtra("request_text_for_second");
request_text = (TextView)this.findViewById(R.id.request_text);
request_text.setText(text);
btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent();
i.putExtra("request_text_for_third", text+"\n"+"从ThirdActivity再次传递到SecondActivity");
setResult(Activity.RESULT_OK, i);
比起前一个demo2其实没有更复杂之处,只是从ThirdActivity跳转回SecondActivity,而通过SecondActivity的另一个Button来跳转回Main的。
下载次数: 152
下载次数: 129
下载次数: 124
浏览 10331
fengzhizi715
浏览: 83614 次
来自: 上海 苏州
血的不错啊,
学习了!!!
不错,楼主确实有才,可我很奇怪的是,这个app现在还有更新么, ...
每次都睡5秒,是不是不太好啊
楼主啊,我用你上面的程序进行定位,我在西安,却定位到了北京,这 ...Android滑动切换activity - gaofen100 - ITeye技术网站
屏幕切换指的是在同一个Activity内屏幕见的切换。
通过GestureDetector、OnGestureListener实现滑屏事件。ViewFlipper是继承至FrameLayout的,所以它是一个Layout里面可以放置多个View。示例中第一页仅放了一个按钮BUTTON,向下滑屏时,每页都只放了一个TEXTVIEW。
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:=""
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
&ViewFlipper android:id="@+id/ViewFlipper01"
android:layout_width="fill_parent" android:layout_height="fill_parent"&
&/ViewFlipper&
&/LinearLayout&
Activity代码:
view plaincopy to clipboardprint?
package com.
import android.app.A
import android.os.B
import android.util.L
import android.view.GestureD
import android.view.MotionE
import android.view.V
import android.view.GestureDetector.OnGestureL
import android.view.ViewGroup.LayoutP
import android.view.animation.AnimationU
import android.widget.B
import android.widget.ExpandableListV
import android.widget.TextV
import android.widget.ViewF
public class Flip extends Activity implements OnGestureListener {
private GestureD
private ViewF
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
flipper = (ViewFlipper) this.findViewById(R.id.ViewFlipper01);
flipper.addView(addButtonByText("按钮"),new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
detector = new GestureDetector(this);
public View addButtonByText(String text){
Button btn = new Button(this);
btn.setText(text);
public View addTextByText(String text){
TextView tv = new TextView(this);
tv.setText(text);
tv.setGravity(1);
public boolean onTouchEvent(MotionEvent event) {
Log.i("Fling", "Activity onTouchEvent!");
return this.detector.onTouchEvent(event);
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
* 监听滑动
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
Log.i("Fling", "Fling Happened!");
if (e1.getX() - e2.getX() & 120) {
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.push_left_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.push_left_out));
this.flipper.addView(addTextByText("文本框"),new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
this.flipper.showNext();
} else if (e1.getX() - e2.getX() & -120) {
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.push_right_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.push_right_out));
this.flipper.showPrevious();
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
这里实现的功能是从右往左滑动则切换到上一个View,从左往右滑动则切换到下一个View,并且使用不同的in、out 动画使切换效果看起来统一一些。
滑屏实现:
通过android.view.GestureDetector类可以检测各种手势事件,该类有两个回调接口分别用来通知具体的事件:
GestureDetector.OnDoubleTapListener:用来通知DoubleTap事件,类似于鼠标的双击事件,该接口有如下三个回调函数:
1. onDoubleTap(MotionEvent e):通知DoubleTap手势,
2. onDoubleTapEvent(MotionEvent e):通知DoubleTap手势中的事件,包含down、up和move事件(这里指的是在双击之间发生的事件,例如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up事件,这两个事件由该函数通知);
3. onSingleTapConfirmed(MotionEvent e):用来判定该次点击是SingleTap而不是DoubleTap,如果连续点击两次就是DoubleTap手势,如果只点击一次,系统等待一段时间后没有收到第二次点击则判定该次点击为SingleTap而不是DoubleTap,然后触发SingleTapConfirmed事件。
GestureDetector.OnGestureListener:用来通知普通的手势事件,该接口有如下六个回调函数:
1. onDown(MotionEvent e):down事件;
2. onSingleTapUp(MotionEvent e):一次点击up事件;
3. onShowPress(MotionEvent e):down事件发生而move或则up还没发生前触发该事件;
4. onLongPress(MotionEvent e):长按事件;
5. onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑动手势事件;
6. onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上拖动事件。
本次仅用到了OnGestureListener类中的onFling方法。 其他手势事件各位可以自己回去试验。
简单说明:
要实现屏幕切换的话,首先需要定义一个GestureDetector:
private GestureDetector mGestureD
并在onCreate函数中初始化:
mGestureDetector = new GestureDetector(this);
同时Activity要继承OnGestureListener接口,并实现其中的onFling方法。
另外Activity的onTouchEvent事件也要实现!!
另外本例View切换时还有动画效果。使用Animation类实现,相关的函数:
setInAnimation:设置View进入屏幕时候使用的动画,该函数有两个版本:
一个接受单个参数,类型为android.view.animation.Animation;
一个接受两个参数,类型为Context和int,分别为Context对象和定义Animation的resourceID。
setOutAnimation: 设置View退出屏幕时候使用的动画,参数setInAnimation函数一样。
showNext: 调用该函数来显示FrameLayout里面的下一个View。
showPrevious: 调用该函数来显示FrameLayout里面的上一个View。
动画源文件: (在res目录下,创建一个anim文件夹,把下面的文件都放在这里)
push_left_in.xml
view plaincopy to clipboardprint?
&?xml version="1.0" encoding="utf-8"?&
&set xmlns:android=""&
&translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="500" /&
&alpha android:fromAlpha="0.1" android:toAlpha="1.0"
android:duration="500" /&
push_left_out.xml:
view plaincopy to clipboardprint?
&?xml version="1.0" encoding="utf-8"?&
&set xmlns:android=""&
&translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="500" /&
&alpha android:fromAlpha="1.0" android:toAlpha="0.1"
android:duration="500" /&
push_right_in.xml:
view plaincopy to clipboardprint?
&?xml version="1.0" encoding="utf-8"?&
&set xmlns:android=""&
&translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="500" /&
&alpha android:fromAlpha="0.1" android:toAlpha="1.0"
android:duration="500" /&
push_right_out.xml:
view plaincopy to clipboardprint?
&?xml version="1.0" encoding="utf-8"?&
&set xmlns:android=""&
&translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="500" /&
&alpha android:fromAlpha="1.0" android:toAlpha="0.1"
android:duration="500" /&
浏览: 262221 次
StringBuffer#reverse() API有这样的方 ...
先谢谢了。希望有点帮助。
你好,通过你的文章对stk的应用有了一定的了解,想请教两个问题 ...Android开发:button在底部的多个view切换&实例二3D切换&_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Android开发:button在底部的多个view切换&实例二3D切换&
来源:Linux社区&
作者:androidzhaoxiaogang
代码精简,结构清晰,使用了include标签,希望对大家有帮助;另外实现了3D旋转动画。建议在看实例二之前参看一下实例1。见
1. 镶嵌View的主ActivityGroup
package&com.isomobile.&&
import&.app.ActivityG&&
import&android.content.I&&
import&android.os.B&&
import&android.view.V&&
import&android.view.animation.A&&
import&android.widget.B&&
import&android.widget.RelativeL&&
public&class&MainActivity&extends&ActivityGroup&implements&View.OnClickListener&{&&
&&&&private&final&static&Class&?&[]&sActivityClasses&=&{&&
&&&&&&&&&&&&Activity1.class,&Activity2.class,&Activity3.class,&Activity4.class,&Activity5.class&&
&&&&private&final&static&int[]&sResIds&=&{&&
&&&&&&&&&&&&R.id.btn1,&R.id.btn2,&R.id.btn3,&R.id.btn4,&R.id.btn5&&
&&&&private&final&static&String[]&sActivityIds&=&{&&
&&&&&&&&&&&&"Activity1",&"Activity2",&"Activity3",&"Activity4",&"Activity5"&&
&&&&private&RelativeLayout&mViewC&&
&&&&private&Button[]&mBtns&=&new&Button[sResIds.length];&&
&&&&private&View&mPreV&&
&&&&private&View[]&mCurView&=&new&View[sResIds.length];&&
&&&&private&int&mCurId&=&0;&&
&&&&private&int&mPreBtnPos,&mCurBtnPos&=&0;&&
&&&&@Override&&
&&&&public&void&onCreate(Bundle&savedInstanceState)&{&&
&&&&&&&&super.onCreate(savedInstanceState);&&
&&&&&&&&setContentView(R.layout.main);&&
&&&&&&&&setupViews();&&
&&&&private&void&setupViews()&{&&
&&&&&&&&mViewContainer&=&(RelativeLayout)&findViewById(R.id.container);&&
&&&&&&&&final&Button[]&btns&=&mB&&
&&&&&&&&for&(int&i&=&0;&i&&&btns.&i++)&{&&
&&&&&&&&&&&&btns[i]&=&(Button)&findViewById(sResIds[i]);&&
&&&&&&&&&&&&btns[i].setOnClickListener(this);&&
&&&&&&&&}&&
&&&&&&&&&&
&&&&&&&&mCurView[0]&=&getLocalActivityManager().startActivity(&&
&&&&&&&&&&&&&&&&sActivityIds[0],&&
&&&&&&&&&&&&&&&&new&Intent(MainActivity.this,&sActivityClasses[0])&&
&&&&&&&&&&&&&&&&&&&&&&&&.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();&&
&&&&&&&&mViewContainer.addView(mCurView[0]);&&
&&&&&&&&mPreView&=&mCurView[0];&&
&&&&&&&&mPreBtnPos&=&0;&&
&&&&@Override&&
&&&&public&void&onClick(View&v)&{&&
&&&&&&&&final&int&id&=&v.getId();&&
&&&&&&&&if&(mCurId&==&id)&{&&
&&&&&&&&&&&&return;&&
&&&&&&&&}&&
&&&&&&&&mCurId&=&&&
&&&&&&&&processViews(id);&&
&&&&&&&&onRotateAnimation(getCurButtonIndex(id));&&
&&&&private&void&processViews(int&rid)&{&&
&&&&&&&&mViewContainer.removeAllViews();&&
&&&&&&&&mCurBtnPos&=&getCurButtonIndex(rid);&&
&&&&&&&&mCurView[mCurBtnPos]&=&getLocalActivityManager().startActivity(&&
&&&&&&&&&&&&&&&&sActivityIds[mCurBtnPos],&&
&&&&&&&&&&&&&&&&new&Intent(this,&sActivityClasses[mCurBtnPos])&&
&&&&&&&&&&&&&&&&&&&&&&&&.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();&&
&&&&private&int&getCurButtonIndex(int&rid)&{&&
&&&&&&&&final&int&length&=&sResIds.&&
&&&&&&&&for&(int&i&=&0;&i&&&&i++)&{&&
&&&&&&&&&&&&if&(rid&==&sResIds[i])&{&&
&&&&&&&&&&&&&&&&return&i;&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&&&&&return&0;&&
&&&&public&void&onRotateAnimation(int&index)&{&&
&&&&&&&&if&(mPreBtnPos&&&mCurBtnPos)&{&&
&&&&&&&&&&&&Rotate3d.rightRotate(mPreView,&mCurView[index],&<FONT color=#c,&0,&<FONT color=#c,&new&AnimListener());&&
&&&&&&&&}&else&{&&
&&&&&&&&&&&&Rotate3d.leftRotate(mPreView,&mCurView[index],&<FONT color=#c,&0,&<FONT color=#c,&new&AnimListener());&&
&&&&&&&&}&&
&&&&&&&&mPreView&=&mCurView[index];&&
&&&&&&&&mViewContainer.removeAllViews();&&
&&&&&&&&mViewContainer.addView(mCurView[index]);&&
&&&&&&&&mPreBtnPos&=&mCurBtnP&&
&&&&private&class&AnimListener&implements&Animation.AnimationListener&{&&
&&&&&&&&public&void&onAnimationEnd(Animation&animation)&{&&
&&&&&&&&&&&&
&&&&&&&&}&&
&&&&&&&&public&void&onAnimationRepeat(Animation&animation)&{&&
&&&&&&&&}&&
&&&&&&&&public&void&onAnimationStart(Animation&animation)&{&&
&&&&&&&&&&&&
&&&&&&&&}&&
2.&Rotate3d.class:
package&com.isomobile.&&
import&android.view.V&&
public&class&Rotate3d&{&&
&&&&private&Rotate3d()&{&&
&&&&public&static&void&leftRotate(View&layoutFrom,&View&layoutTo,&int&centerX,&int&centerY,&&
&&&&&&&&&&&&int&duration,&android.view.animation.Animation.AnimationListener&animationListener)&{&&
&&&&&&&&final&Animation3d&fromAnimation&=&new&Animation3d(0.0F,&-90F,&0.0F,&0.0F,&centerX,&centerY);&&
&&&&&&&&final&Animation3d&toAnimation&=&new&Animation3d(90F,&0.0F,&0.0F,&0.0F,&centerX,&centerY);&&
&&&&&&&&fromAnimation.setDuration(duration);&&
&&&&&&&&toAnimation.setDuration(duration);&&
&&&&&&&&toAnimation.setAnimationListener(animationListener);&&
&&&&&&&&layoutFrom.startAnimation(fromAnimation);&&
&&&&&&&&layoutTo.startAnimation(toAnimation);&&
&&&&&&&&layoutTo.setVisibility(0);&&
&&&&&&&&layoutFrom.setVisibility(8);&&
&&&&public&static&void&rightRotate(View&layoutFrom,&View&layoutTo,&int&centerX,&int&centerY,&&
&&&&&&&&&&&&int&duration,&android.view.animation.Animation.AnimationListener&animationListener)&{&&
&&&&&&&&final&Animation3d&fromAnimation&=&new&Animation3d(0.0F,&90F,&0.0F,&0.0F,&centerX,&centerY);&&
&&&&&&&&final&Animation3d&toAnimation&=&new&Animation3d(-90F,&0.0F,&0.0F,&0.0F,&centerX,&centerY);&&
&&&&&&&&fromAnimation.setDuration(duration);&&
&&&&&&&&toAnimation.setDuration(duration);&&
&&&&&&&&toAnimation.setAnimationListener(animationListener);&&
&&&&&&&&layoutFrom.startAnimation(fromAnimation);&&
&&&&&&&&layoutTo.startAnimation(toAnimation);&&
&&&&&&&&layoutTo.setVisibility(0);&&
&&&&&&&&layoutFrom.setVisibility(8);&&
3.&Animation3d.class:
package&com.isomobile.&&
import&android.graphics.C&&
import&android.graphics.M&&
import&android.view.animation.A&&
import&android.view.animation.T&&
public&class&Animation3d&extends&Animation&{&&
&&&&private&final&float&mFromD&&
&&&&private&final&float&mToD&&
&&&&private&final&float&mCenterX;&&
&&&&private&final&float&mCenterY;&&
&&&&private&final&float&mL&&
&&&&private&final&float&mT&&
&&&&private&Camera&mC&&
&&&&public&Animation3d(float&fromDegree,&float&toDegree,&float&left,&float&top,&float&centerX,&&
&&&&&&&&&&&&float&centerY)&{&&
&&&&&&&&mFromDegree&=&fromD&&
&&&&&&&&mToDegree&=&toD&&
&&&&&&&&mLeft&=&&&
&&&&&&&&mTop&=&&&
&&&&&&&&mCenterX&=&centerX;&&
&&&&&&&&mCenterY&=&centerY;&&
&&&&public&void&initialize(int&width,&int&height,&int&parentWidth,&int&parentHeight)&{&&
&&&&&&&&super.initialize(width,&height,&parentWidth,&parentHeight);&&
&&&&&&&&mCamera&=&new&Camera();&&
&&&&protected&void&applyTransformation(float&interpolatedTime,&Transformation&t)&{&&
&&&&&&&&final&float&FromDegree&=&mFromD&&
&&&&&&&&float&degrees&=&FromDegree&+&(mToDegree&-&mFromDegree)&*&interpolatedT&&
&&&&&&&&final&float&centerX&=&mCenterX;&&
&&&&&&&&final&float&centerY&=&mCenterY;&&
&&&&&&&&Matrix&matrix&=&t.getMatrix();&&
&&&&&&&&if&(degrees&&=&-76F)&{&&
&&&&&&&&&&&&degrees&=&-90F;&&
&&&&&&&&&&&&mCamera.save();&&
&&&&&&&&&&&&mCamera.rotateY(degrees);&&
&&&&&&&&&&&&mCamera.getMatrix(matrix);&&
&&&&&&&&&&&&mCamera.restore();&&
&&&&&&&&}&else&if&(degrees&&=&76F)&{&&
&&&&&&&&&&&&degrees&=&90F;&&
&&&&&&&&&&&&mCamera.save();&&
&&&&&&&&&&&&mCamera.rotateY(degrees);&&
&&&&&&&&&&&&mCamera.getMatrix(matrix);&&
&&&&&&&&&&&&mCamera.restore();&&
&&&&&&&&}&else&{&&
&&&&&&&&&&&&mCamera.save();&&
&&&&&&&&&&&&mCamera.translate(0.0F,&0.0F,&centerX);&&
&&&&&&&&&&&&mCamera.rotateY(degrees);&&
&&&&&&&&&&&&mCamera.translate(0.0F,&0.0F,&-centerX);&&
&&&&&&&&&&&&mCamera.getMatrix(matrix);&&
&&&&&&&&&&&&mCamera.restore();&&
&&&&&&&&}&&
&&&&&&&&matrix.preTranslate(-centerX,&-centerY);&&
&&&&&&&&matrix.postTranslate(centerX,&centerY);&&
整个工程源代码下载地址见:&
免费下载地址在
用户名与密码都是
具体下载目录在 /pub/Android???码集锦/2011年/9月/Android开发:button在底部的多个view切换 实例二3D切换/
&(注意将processViews里面的addView方法去掉,不小心add了2次,特此说明。)
相关资讯 & & &
& (05月04日)
& (01月20日)
& (06月21日)
& (02月10日)
& (11/01/:38)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 activity切换动画 的文章

 

随机推荐