LayoutAnimation和overridePendingTransition

2023-12-23 05:58

本文主要是介绍LayoutAnimation和overridePendingTransition,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、LayoutAnimation


LayoutAnimationController用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置动画效果,比如listview,recyclerview的item进入动画,可以在XML文件中设置,亦可以在Java代码中设置。

XML中使用

1、在res.anim.slide_right.xml定义一个动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:anim/accelerate_interpolator"><translate
        android:duration="2000"android:fromXDelta="-100%p"android:toXDelta="0" />
</set>

2、在res.anim.list_anim_layout.xml引用刚才的动画

<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"android:animation="@anim/slide_right"android:animationOrder="reverse"android:delay="30%" /><!--Android:delay  子类动画时间间隔 (延迟)   70% 也可以是一个浮点数 如“1.2”等--><!--android:animationOrder="random"   子类的显示方式 random表示随机--><!--android:animationOrder 的取值有--><!--normal  0      默认--><!--reverse 1     倒序--><!--random  2     随机--><!--android:animation="@anim/slide_right" 表示孩子显示时的具体动画是什么-->

说明:其中delay的单位为秒;animation为设置动画的文件。animationOrder为进入方式

3、在viewgroup的XML文件中引用layoutAnimation

    <ListView
        android:id="@+id/listview"android:layout_width="match_parent"android:layout_height="match_parent"android:layoutAnimation="@anim/list_anim_layout" />

java代码中使用:

1. 同上;
2. 3. 在Acitivty中添加如下代码:

//通过加载XML动画设置文件来创建一个Animation对象;Animation animation=AnimationUtils.loadAnimation(this, R.anim.list_anim);//得到一个LayoutAnimationController对象;LayoutAnimationController lac=new LayoutAnimationController(animation);//设置控件显示的顺序;lac.setOrder(LayoutAnimationController.ORDER_REVERSE);//设置控件显示间隔时间;lac.setDelay(1);//为ListView设置LayoutAnimationController属性;datalist.setLayoutAnimation(lac);

二、Activity的切换效果

public void overridePendingTransition(int enterAnim, int exitAnim) {...}

Android Activity切换动画是指从Activity A 跳转至Activity B的时候,
Activity A 有退出动画exitAnim,
Activity B 有进入动画enterAnim。

overridePendingTransition 方法必须在startActivity()或者 finish()方法的后面。

如:

Intent intent = new Intent(MainActivity.this, MainActivityI.class);
startActivity(intent);                    
overridePendingTransition(R.anim.in, R.anim.out);
/*** Call immediately after one of the flavors of {@link #startActivity(Intent)}* or {@link #finish} to specify an explicit transition animation to* perform next.** <p>As of {@link android.os.Build.VERSION_CODES#JELLY_BEAN} an alternative* to using this with starting activities is to supply the desired animation* information through a {@link ActivityOptions} bundle to* {@link #startActivity(Intent, Bundle)} or a related function.  This allows* you to specify a custom animation even when starting an activity from* outside the context of the current top activity.** @param enterAnim A resource ID of the animation resource to use for* the incoming activity.  Use 0 for no animation.//enterAnim:用于进入的activity的动画资源ID,设置为0:没有动画。* @param exitAnim A resource ID of the animation resource to use for* the outgoing activity.  Use 0 for no animation.//用于出去的activity的动画资源ID,设置为0:没有动画。*/public void overridePendingTransition(int enterAnim, int exitAnim) {try {ActivityManagerNative.getDefault().overridePendingTransition(mToken, getPackageName(), enterAnim, exitAnim);} catch (RemoteException e) {}}

例子:

in.xml:

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

out.xml:

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

java类:

public class MainActivity extends AppCompatActivity {private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);overridePendingTransition(R.anim.in, R.anim.out);
//        overridePendingTransition(R.anim.in, 0);tv = ((TextView) findViewById(R.id.tv));tv.setText("我是MainActivity === 1111111111111111");
//        overridePendingTransition(R.anim.in, R.anim.out);
//        overridePendingTransition(R.anim.in, 0);tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(MainActivity.this, TwoActivity.class));
//                overridePendingTransition(R.anim.in, R.anim.out);
//                overridePendingTransition(R.anim.in, 0);}});}
}

效果图:

Markdown

public class MainActivity extends AppCompatActivity {private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
//        overridePendingTransition(R.anim.in, R.anim.out);overridePendingTransition(R.anim.in, 0);tv = ((TextView) findViewById(R.id.tv));tv.setText("我是MainActivity === 1111111111111111");
//        overridePendingTransition(R.anim.in, R.anim.out);
//        overridePendingTransition(R.anim.in, 0);tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(MainActivity.this, TwoActivity.class));
//                overridePendingTransition(R.anim.in, R.anim.out);
//                overridePendingTransition(R.anim.in, 0);}});}
}

效果图:
Markdown

public class MainActivity extends AppCompatActivity {private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
//        overridePendingTransition(R.anim.in, R.anim.out);
//        overridePendingTransition(R.anim.in, 0);tv = ((TextView) findViewById(R.id.tv));tv.setText("我是MainActivity === 1111111111111111");
//        overridePendingTransition(R.anim.in, R.anim.out);
//        overridePendingTransition(R.anim.in, 0);tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(MainActivity.this, TwoActivity.class));overridePendingTransition(R.anim.in, R.anim.out);
//                overridePendingTransition(R.anim.in, 0);}});}
}

效果图:
Markdown

总结:

startActivity前设置overridePendingTransition:in动画是所在activity的进入动画,out是前一个activity的出去动画。

startActivit后设置overridePendingTransition:
in动画是下一个activity的进入动画,out是当前activity的出去动画。

这篇关于LayoutAnimation和overridePendingTransition的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526955

相关文章

LayoutAnimation给ListView中的item设置动态出场效果

LayoutAnimation作用于ViewGroup,为ViewGroup指定一个动画,当它的子元素出场时都按照这个动画出场。 LayoutAnimation作用于viewgroup有两种方式: 1. 静态的使用xml文件实现。 2. 在代码中动态实现。 下面用ListView中的item设置动态出场效果来分别介绍两种方式: 静态的使用xml文件实现,分为三步 1. 在res的ani

Android的Animation之LayoutAnimation使用方法

LayoutAnimationController用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置动画效果,可以在XML文件中设置,亦可以在Java代码中设置。 一种直接在XML文件中设置 1.  在res/anim文件夹下新建一个XML文件,名为list_anim_layout.xml,  view plaincopy <layoutAnim

android overridePendingTransition()使用(切换activity动画实现)

实现两个 Activity 切换时的动画。在Activity中使用 有两个参数:进入动画和出去的动画。 注意 1、必须在 StartActivity()  或 finish() 之后立即调用。 2、而且在 2.1 以上版本有效 3、手机设置-显示-动画,要开启状态 //实现淡入浅出的效果 startActivity(newIntent(MainActivity.this,SecondActivi

Android layoutAnimation简单应用,让你的应用提高逼格

最近在玩一个APP的时候,发现刚进入他的页面,他页面的子控件都是从右侧飞过来的,感觉好牛逼的样子,就顺便模仿了一个。看着确实是比死板呆在那舒服多了! 还是感觉很好看!反正我觉得比死板呆在那好看!你们觉得那! 在看咱们模仿的: 差不多,在微调一下就好了! 上点代码,其实很简单: 首先新建一个anim文件夹在里面新建两个xml <layoutAnimation xmlns:

Android中Activity的切换动画(非overridePendingTransition)

摘自:http://fuyunhe.iteye.com/blog/1834874 我们知道,在Manifest文件中声明Activity时,可以通过android:theme属性设置Activity的主题。主题中定义了关于Activity外观的很多特性。同时,主题中还可以定义Activity的切换动画。通过主题的形式定义的Activity切换动画,甚至可以超越API的限制,在2.0以

Android动画之Activity切换动画overridePendingTransition实现和Theme Xml方式实现

动画入门和进阶文章列表: Animation动画概述和执行原理 Android动画之补间动画TweenAnimation Android动画之逐帧动画FrameAnimation Android动画之插值器简介和系统默认插值器 Android动画之插值器Interpolator自定义 Android动画之视图动画的缺点和属性动画的引入 Android动画之ValueAnimator用法和自定义估

为ViewGroup添加入场动画,LayoutAnimation使用概述

本篇文章来一点好玩的效果。还记得之前的视图动画效果吗?之前我们控制的效果,都是针对单个视图,如果想要对一组视图使用相同的动画效果,这个时候,就需要使用到LayoutAnimationController了。 LayoutAnimationController介绍: Android Developer LayoutAnimationController docment LayoutAnimat

android动画--layoutAnimation与gridLayoutAnimation

原文地址:http://blog.csdn.net/harvic880925/article/details/50785786 前言:人或许天生是懒惰的,明知道的不足,却不努力弥补。 前几篇给大家讲述了如何针对某一个控件应用动画,这篇将给大家讲解如何给容器中的控件应用统一动画。即在容器中控件出现时,不必为每个控件添加进入动画,可以在容器中为其添加统一的进入和退出动画。 从上面的示例动画

切换Activity时的动画overridePendingTransition(A,B)解析

声明:转载请注明出处:http://blog.csdn.net/hello_chillax/article/details/45690879 目的: Android中不同Activity之间的切换是不可避免的事情,那么怎么才能让Acitivity的切换更优雅呢,Android中提供了一个方法来解决这个问题,即overridePendingTransition(A,B)函数。 效果: 用一张图来