Tween动画(四种)以及Activity间跳转动画

简介: main.xml如下: secondActiv...

main.xml如下:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    <ImageView 
        android:id="@+id/imageView"
        android:layout_width="60dip"
        android:layout_height="90dip"
        android:scaleType="fitXY"
        android:layout_marginTop="80dip"
        android:src="@drawable/haha"
        android:layout_centerHorizontal="true"
     />
    <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_below="@id/imageView"
        android:layout_marginTop="35dip"
    >
        <Button 
            android:id="@+id/alphaButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="alpha"       
        />
         <Button 
            android:id="@+id/scaleButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="scale"
            android:layout_marginLeft="15dip"
        />
          <Button 
            android:id="@+id/rotateButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="rotate"
            android:layout_marginLeft="15dip"
        />
           <Button 
            android:id="@+id/translateButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="translate"
            android:layout_marginLeft="15dip"
        />
    </LinearLayout>
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="270dip"
        android:text="@string/hello_world"
        tools:context=".MainActivity" />

    <Button 
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Jump To 1"
        android:layout_below="@id/textView"
        android:layout_marginTop="20dip"
        android:layout_alignParentLeft="true"
       
    />
    
     <Button 
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Jump To 2"
        android:layout_below="@id/textView"
        android:layout_marginTop="20dip"
        android:layout_alignParentRight="true"
       
    />
</RelativeLayout>


secondActivity布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <TextView 
        android:layout_width="120dip"
        android:layout_height="wrap_content"
        android:text="The second Activity"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="120dip"
     />

</LinearLayout>


mainActivity如下:

package com.example.testactivityjumpanimation;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
    private Button button1;
    private Button button2;
    private Button alphaButton;
    private Button scaleButton;
    private Button rotateButton;
    private Button translateButton;
    private Animation animation;
    private ImageView imageView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Activity跳转间动画1
        button1=(Button) findViewById(R.id.button1);
        button1.setOnClickListener(new ButtonClickListener());
        //Activity跳转间动画1
        button2=(Button) findViewById(R.id.button2);
        button2.setOnClickListener(new ButtonClickListener());
        //展示动画的ImageView
        imageView=(ImageView) findViewById(R.id.imageView);
        //测试四个动画的按钮
        alphaButton=(Button) findViewById(R.id.alphaButton);
        scaleButton=(Button) findViewById(R.id.scaleButton);
        rotateButton=(Button) findViewById(R.id.rotateButton);
        translateButton=(Button) findViewById(R.id.translateButton);
        
        alphaButton.setOnClickListener(new ButtonClickListener());
        scaleButton.setOnClickListener(new ButtonClickListener());
        rotateButton.setOnClickListener(new ButtonClickListener());
        translateButton.setOnClickListener(new ButtonClickListener());   
    }
 
    private class ButtonClickListener implements OnClickListener{
		public void onClick(View v) {
			switch (v.getId()) {
			//Activity之间跳转的动画1
			case R.id.button1:
				Intent intent1=new Intent(MainActivity.this, SecondActicity.class);
				startActivity(intent1);
				//注意参数的解释:
				//第一个参数 enterAnim
				//A resource ID of the animation resource to use for the incoming activity.
				//Use 0 for no animation.
				//第二个参数 exitAnim
				//A resource ID of the animation resource to use for the outgoing activity. 
				//Use 0 for no animation.
				//注意该方法应该紧挨着startActivity()或者finish()后调用
				overridePendingTransition(R.anim.in1, R.anim.out1);
				break;
			case R.id.button2:
				Intent intent2=new Intent(MainActivity.this, SecondActicity.class);
				startActivity(intent2);
				overridePendingTransition(R.anim.in2, R.anim.out2);
				break;
			//透明度动画
			case R.id.alphaButton:
				animation=AnimationUtils.loadAnimation(MainActivity.this, R.anim.alphaanimation);
				imageView.startAnimation(animation);
				break;
			//大小变化动画
           case R.id.scaleButton:
        	   animation=AnimationUtils.loadAnimation(MainActivity.this, R.anim.scaleanimation);
        	   imageView.startAnimation(animation);
				break;
			//旋转动画
           case R.id.rotateButton:
        	   animation=AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotateanimation);
        	   imageView.startAnimation(animation);
				break;
			//位移动画
           case R.id.translateButton:
        	   animation=AnimationUtils.loadAnimation(MainActivity.this, R.anim.translateanimation);
        	   imageView.startAnimation(animation);
				break;			
			default:
				break;
			}						
		}    	
    }
}


secondActivity如下:

package com.example.testactivityjumpanimation;
import android.app.Activity;
import android.os.Bundle;
public class SecondActicity extends Activity {
	 @Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.second);
	       
	    }
}


以下为动画xml文件

alphaanimation.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- Alpha的值界于0.0与1.0之间 -->
<!-- Alpha=0的时候不可见 -->
<!-- Alpha=1的时候完全可见 -->
<!-- repeatCount设置了动画重复的次数 -->
<!-- repeatCount=1,那么动画一共会执行2次 -->
<!-- repeatCount的意思是除了原本的执行以后还要执行几次 -->
<!-- android:repeatMode有两种,测试一下即明白 -->

<!-- 
android:fillAfter和android:fillBefore只能在set中设置!!!
android:fillAfter="true"
表示动画结束后,当前画面就为动画结束后的效果
android:fillBefore="true"
表示动画结束后,当前画面就为动画开始前的效果
-->
<!--
 android:startOffset也是在set中设置才有效果
-->
<!--   android:interpolator用于控制动画执行过程中的速度 -->

<set 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillBefore="true"
    >
    <alpha 
        android:fromAlpha="1.0"
        android:toAlpha="0.1"
        android:duration="10000"
        android:repeatCount="1" 
    />
</set>


scaleanimation.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- fromX(Y)Scale和toX(Y)Scale的值: -->
<!-- 0.0表示收缩到没有 -->
<!-- 1.0表示正常无收缩 -->
<!-- 值小于1.0表示收缩 -->
<!-- 值大于1.0表示放大 -->

<!-- 注意: -->
<!-- 应该同时设置X和Y的from和to,否则无效果-->

<!-- pivot本意是枢轴,中心点的意思 -->
<!-- pivotX(Y)表示动画相对于物件的X,Y坐标的开始位置 -->
<!-- pivotX(Y)取值范围为0%到100% -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale 
        android:fromXScale="0.4"
        android:toXScale="2.0"
        android:fromYScale="0.4"
        android:toYScale="2.0"
        android:pivotX="100%"
        android:pivotY="50%"
        android:duration="3000" 
     />
</set>


rotateanimation.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- android:fromDegrees表示动画开始时相对于原物件的角度 -->
<!-- android:toDegrees表示动画结束时相对于原物件旋转的角度-->
<!-- 此处使用到的角度:正数表示顺时针旋转 -->
<!-- 此处使用到的角度:负数表示逆时针旋转 -->

<!-- 以下说法不准确 -->
<!-- from为负数,to为正数,顺时针旋转 -->
<!-- from为负数,to为负数,逆时针旋转 -->
<!-- from为正数,to为正数,顺时针旋转 -->
<!-- from为正数,to为负数,逆时针旋转 -->

<!-- 应该是to减去from=结果 -->
<!-- 结果大于0,顺时针旋转 -->
<!-- 结果小于0,逆时针旋转 -->
<!-- 和前面描述from和to是一样的: -->
<!-- 正数表示顺时针旋转 -->
<!-- 负数表示逆时针旋转 -->

<!-- 更准确应该这么理解 -->
<!-- 应该是from减去to=结果 -->
<!-- 结果大于0,逆时针旋转 -->
<!-- 结果小于0,正时针旋转 -->
<!-- 这样符合一贯的理解:顺时针为负,逆时针为正 -->

<!-- pivot本意是枢轴,中心点的意思 -->
<!-- pivotX(Y)表示动画开始的时候相对于原来物件的X,Y坐标-->
<!-- pivotX(Y)取值范围为0%到100% -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <rotate 
       android:fromDegrees="90"
       android:toDegrees="-90"
       android:pivotX="50%"
       android:pivotY="50%"
       android:duration="4000" 
   /> 
</set>


translateanimation.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- 
    fromXDelta  表示动画开始的点的X离当前View X坐标上的差值
  toXDelta    表示动画结束的点的X离当前View X坐标上的差值
  fromYDelta  表示动画开始的点的Y离当前View Y坐标上的差值
  toYDelta    表示动画开始的点的Y离当前View Y坐标上的差值
 -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate 
        android:fromXDelta="100"
        android:toXDelta="0"
        android:fromYDelta="30"
        android:toYDelta="0"
        android:duration="3000"     
    />
</set>

 

in1.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- 作用于即将出现的Activity -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator" >

    <scale
        android:duration="3000"
        android:fromXScale="2.0"
        android:toXScale="1.0"
        android:fromYScale="2.0"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        />

</set>


out1.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- 作用于即将消失的Activity -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:zAdjustment="top" >

    <scale
        android:duration="5000"
        android:fromXScale="1.0"
        android:toXScale="0.5"
        android:fromYScale="1.0"
        android:toYScale="0.5"
        android:pivotX="50%"
        android:pivotY="50%"
        />

    <alpha
        android:duration="5000"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />

</set>


in2.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="320"
        android:toXDelta="0"
        android:duration="300"
    />
</set>


out2.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- 
设置android:fromXDelta="0"且android:toXDelta="0"作用:
防止在Activity页面跳转的时候,出现黑屏.
且注意:out2中的android:duration和in2中的保持一致
-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0"
        android:toXDelta="0"
        android:duration="300"
    />
</set>



 

相关文章
|
容器 微服务 Kubernetes
带你读《Istio入门与实战》之一:服务网格与Istio
本书系统化介绍Istio技术要点与应用技巧,可帮助读者快速搭建微服务架构并进行管理。主要内容包括:service mesh基本概念与使用,Istio架构设计与主要功能,快速搭建一个微服务实验,介绍如何让服务流量控制更简单,让服务更具弹性,让服务故障测试更容易,让服务通信更安全可控,让服务更易观测与监控,以及istio维护方案。本书内容丰富、案例讲解,实用性强,非常适合入门级读者快速掌握Istio技术。
|
12月前
|
存储 SQL 关系型数据库
深入探究InnoDB的MVCC快照机制
本文详细介绍了InnoDB存储引擎中的两种并发控制方法:MVCC(多版本并发控制)和LBCC(基于锁的并发控制)。MVCC通过记录版本信息和使用快照读取机制,实现了高并发下的读写操作,而LBCC则通过加锁机制控制并发访问。文章深入探讨了MVCC的工作原理,包括插入、删除、修改流程及查询过程中的快照读取机制。通过多个案例演示了不同隔离级别下MVCC的具体表现,并解释了事务ID的分配和管理方式。最后,对比了四种隔离级别的性能特点,帮助读者理解如何根据具体需求选择合适的隔离级别以优化数据库性能。
587 5
深入探究InnoDB的MVCC快照机制
活锁与死锁
【8月更文挑战第22天】
240 4
|
11月前
|
存储 监控 Java
处理40亿个QQ号的挑战:如何在1GB内存中实现高效管理
在大数据时代,如何高效管理和处理海量数据是每个开发者和数据工程师面临的挑战。以40亿个QQ号为例,如何在仅有1GB内存的条件下完成数据的存储、查询和处理,成为了一个值得深入探讨的问题。本文将分享一些有效的策略和技术,帮助你在内存受限的情况下高效处理海量数据。
173 3
|
11月前
|
运维 负载均衡 网络协议
OSPF的主要特点与优势
OSPF的主要特点与优势
971 0
|
Kubernetes Perl 容器
在K8S中,flannel能固定节点IP和Pod的IP地址吗?
在K8S中,flannel能固定节点IP和Pod的IP地址吗?
|
12月前
|
移动开发 数据可视化 小程序
高颜值可视化设计UNIAPP源码生成器
高颜值可视化设计UNIAPP源码生成器
186 1
|
11月前
|
API Docker 容器
如何免费获取 ChatGPT API Key?
上篇文章介绍了NextChat项目,只需配置ChatGPT API Key即可拥有私人ChatGPT网页应用。本文继续介绍免费获取API Key的来源——GPT_API_free,一个拥有13.6K Star的Github开源项目。需用Github账号绑定领取Key,支持gpt-3.5-turbo、embedding、gpt-4,但gpt-4每天限3次调用。GPT_API_free也提供付费版API,以支持项目持续运营。
6500 0
如何免费获取 ChatGPT API Key?
|
运维 监控 容灾
[go 面试] 实现服务高可用的策略和实践
[go 面试] 实现服务高可用的策略和实践
|
搜索推荐
用户画像活动推荐系统 毕业设计 JAVA+Vue+SpringBoot+MySQL(二)
用户画像活动推荐系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
255 0