安卓oncreate安卓animationn怎么用

Android动画学习(一)之动画概述和帧动画实现 - TDCQZD的博客 - CSDN博客
Android动画学习(一)之动画概述和帧动画实现
Android动画处理
Android动画学习(一)之动画概述
在App上实现动画效果在Android开发中越来越重要。最近花了一些时间将Android动画学习了一遍。现将学习到的知识分享给大家。
主要介绍的内容如下:
实现帧动画
实现补间动画
实现属性动画
实现转场动画
实现SVG矢量动画
一些功能强大的动画库介绍使用
给大家看一个学习效果图
动画实现的方式
纯编码的方式
代码实现动画即在XML中显示要进行动态显示的控件(一般ImageView),在Java代码中配置的属性。
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
app:srcCompat="@drawable/girl" /&
Java实现:
public void alph(View view) {
animation_Alpha = new AlphaAnimation(0.1f, 1.0f);
animation_Alpha.setDuration(2000);
iv.startAnimation(animation_Alpha);
Xml配置的方式
代码实现动画即在XML中显示要进行动态显示的控件,在res下新建anim(设置普通动画属性), animator(设置属性动画属性) 的set标签下进行动画属性配置(后面详细讲),在Java代码中加载动画,也可以设置属性。
View Animation(视图动画)
定义:同一个图形通过视图在界面上进行透明度,缩放,旋转,平移的变化(View动画)如补间动画。
缩放动画(ScaleAnimation)
透明度动画(AlphaAnimation)
旋转动画(RotateAnimation)
平移动画(TranslateAnimation)
复合动画(AnimationSet) :由多个单一动画组合在一起的动画。
Drawable Animation(图片动画)
定义:在界面的同一个位置上不断切换显示不同的图片(Drawable动画)如帧动画。
工作原理:将一个完整的动画拆分成一张张单独的图片,然后再将它们连贯起来进行播放,类似于动画片的工作原理
ValueAnimator(属性动画)
概述:属性动画是Android3.0版本推出的动画框架,其功能和拓展性都很强,是一种不断地对值进行操作的机制,并将值赋值到指定对象的指定属性上,可以是任意对象的任意属性,可以将一个View进行移动或者缩放,可以对自定义View中的Point对象进行动画操作。
属性动画的机制
属性动画已经不是再针对于View而进行设计的了,而是一种不断地对值进行操作的机制,它可以将值赋值到指定对象的指定属性上。
CircularReveral
Android5.0推出的新的动画框架,可以给View做一个揭露效果。
帧动画学习使用
逐帧动画(Frame-by-frame Animations)从字面上理解就是一帧挨着一帧的播放图片,就像放电影一样。
逐帧动画是最简单的动画,它的使用非常简单,在动画过程中把每一张静态图片添加到动画集中,有Android动画机制控制依次显示动画集中的图片。
从下面的继承关系中可以看出AnimationDrawable本质还是图片(Drawable)。
AnimationDrawable extends DrawableContainer
DrawableContainer extends Drawable
setVisible( boolean visible, boolean restart):
设置AnimationDrawable的可见性,true可见,false不可见,xml中定义的visible属性无用,因为根本没有解析。
void start():开始动画执行,不能在onCreate调用,如果有必要界面启动就运行动画,则在onWindowFocusChanged中调用;
void stop():停止动画执行
boolean isRunning():返回动画是否正在执行;
void unscheduleSelf(Runnable
取消当前动画上计划执行的一个Runnable,一般这个Runnable都是用于绘制下一帧的;
int getNumberOfFrames():获取当前动画的帧数量;
Drawable getFrame( int index):获取指定位置的帧;
int getDuration( int i):获取指定位置帧的展示时长;
boolean isOneShot():获取动画是执行性一次还是无限循环,true只执行一次,false无限循环;
void setOneShot( boolean oneShot):设置动画是执行一次还是无限循环;
void addFrame(@NonNull Drawable frame, int duration):添加一个帧到动画序列中,duration动画时间;
以上是AnimationDrawable 常用的一些API,可以满足AnimationDrawable 使用的基本功能。如果想深入了解,请参照.
代码实现:
AnimationDrawable在Java代码中实现非常简单,调用AnimationDrawable .addFrame方法把动画需要的静态图片添加到AnimationDrawable 中,然后开启动画即可。
在xml中直接实现帧动画的步骤:
1、在drawable中创建 A.xml,在animation-list标签下item标签中设置动画属性;
2、在Layout布局文件中的ImageView控件中引用资源;
3、在Activity中调用AnimationDrawableAPI(参考常用上面API)。
AnimationDrawable动画不是默认播放的,必须在程序中调用动画播放的方法。如果需要进入界面就自动开始动画,则需要在onWindowFocusChanged()回调中执行,不能在onCreate中AnimationDrawable.start。(参考下面Activity中代码)
原因:onCreate中AnimationDrawable尚未绘制到View上,在onWindowFocusChanged()中,此时界面已经创建完成。
weather_animationlist.xml
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"&
android:drawable="@drawable/clear"
android:duration="500" /&
android:drawable="@drawable/cloudy"
android:duration="500" /&
android:drawable="@drawable/haze"
android:duration="500" /&
android:drawable="@drawable/wind"
android:duration="500" /&
android:drawable="@drawable/rain"
android:duration="500" /&
android:drawable="@drawable/storm"
android:duration="500" /&
android:drawable="@drawable/snow"
android:duration="500" /&
布局文件:(ImageView引用weather_animationlist)
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:src="@drawable/weather_animationlist" /&
说明:引用weather_animationlist有两种方法,xml中直接引用,或者在Java中设置。这个看自己意愿。
Activity代码:
created at
description:
public class FrameAnimatonActivity extends AppCompatActivity {
private ImageV
private TextView textV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_frame);
iv = (ImageView) findViewById(R.id.imageView);
textView = (TextView) findViewById(R.id.tv_title);
textView.setText("帧动画使用");
public void start(View view) {
iv.setImageResource(R.drawable.weather_animationlist);
AnimationDrawable animationDrawable = (AnimationDrawable) iv.getDrawable();
animationDrawable.start();
public void end(View view) {
iv.setImageResource(R.drawable.weather_animationlist);
AnimationDrawable animationDrawable = (AnimationDrawable) iv.getDrawable();
animationDrawable.stop();
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
iv.setImageResource(R.drawable.weather_animationlist);
AnimationDrawable animationDrawable = (AnimationDrawable) iv.getDrawable();
animationDrawable.start();
public void java(View view) {
AnimationDrawable anim = new AnimationDrawable();
anim.addFrame(getResources().getDrawable(R.drawable.clear), 200);
anim.addFrame(getResources().getDrawable(R.drawable.cloudy), 200);
anim.addFrame(getResources().getDrawable(R.drawable.haze), 200);
anim.addFrame(getResources().getDrawable(R.drawable.wind), 200);
anim.addFrame(getResources().getDrawable(R.drawable.rain), 200);
anim.addFrame(getResources().getDrawable(R.drawable.storm), 200);
anim.addFrame(getResources().getDrawable(R.drawable.snow), 200);
anim.setOneShot(false);
iv.setImageDrawable(anim);
anim.start();
实现效果:
帧动画就是不停的切换图片实现动画效果.帧动画使用简单,但是没有扩展性,而且如果图片过大容易OOM。谨慎使用!一般不推荐使用。此篇文章到此结束。请继续关注下篇博客。
写博客是为了帮助开发者学习使用技术,同时巩固自己所学技术。如果此篇博客有助于您的学习,那是我的荣幸!如果此篇博客有任何瑕疵,请多多指教!在此感谢您的学习和指教!
我的热门文章&nbsp&#8250&nbsp&nbsp&#8250&nbsp
安卓过渡动画入门介绍
英文原文 &一直以来,我都是将Transition animation译作动画变换,觉得不好,从本篇文章开始,以过渡动画来取代之。这篇文章就是关于过渡动画的一个管中窥豹似的资料。在开始翻译原文之前,我还是对过渡动画的一些概念做必要的解释,因为安卓中其实动画早就有了,先后出现了视图动画,属性动画(还有其他的如帧动画等,不过我将他们看作是另类的动画),记得刚刚开始的时候,对于属性动画和视图动画同时存在的必要性就很是怀疑。然后现在4.4之后又出现了transition框架(即过渡动画),对于初学者而言,这实在是太难了,因为你根本搞不清为什么会出现那么多的动画,这些动画到底是不同的动画,还是先后传承的动画?下面就做一些解释。我认为视图动画是一种过时的动画,属性动画可以做到任何视图动画可以做的事情,而且做的更好,因此在2.3渐渐远去的时代,我觉得可以抛弃视图动画这种概念
了。即便要兼容2.3,属性动画也有兼容项目nineoldandroids可以做到。而且transition框架是基于属性
动画实现的,transition框架是对属性动画的一种封装,transition框架提供的api可以简单的实现很复杂的属性动画效果,但是
transition框架并不会完全替代属性动画的基本用法。好了下面是译文:安卓的Transition框架主要运用在以下三种情况:1.activity之间或者Fragment之间的过渡动画。2.activity之间或者Fragment之间的共享元素(又叫hero view)的过渡动画。3.activity中布局元素的过渡动画。其实1和2都是用于activity(或者)切换的时候。而且1和2是可以同时使用的。ps
:虽然overridePendingTransition也可以实现activity的切换,但是overridePendingTransition
没有共享元素的切换效果。而第三种其实是最简单的,主要调用几个已经定义好的动画类就可以了。1. activity之间的过度动画你可以在xml中定义这种动画res/transition/activity_explode.xml&?xml&version=&1.0&&encoding=&utf-8&?&
&transitionSet&xmlns:android=&/apk/res/android&&
&&&&&explode&android:duration=&2000&/&
&/transitionSet&res/values/style.xml&item&name=&android:windowEnterTransition&&@transition/activity_explode.xml&/item&也可以通过代码的方式:MainActivity.java@Override
protected&void&onCreate(Bundle&savedInstanceState)&{
&&&&super.onCreate(savedInstanceState);
&&&&setContentView(R.layout.activity_main);
&&&&setupWindowAnimations();
private&void&setupWindowAnimations()&{
&&&&Explode&explode&=&new&Explode();
&&&&explode.setDuration(2000);
&&&&getWindow().setExitTransition(explode);
}DetailActivity.java@Override
protected&void&onCreate(Bundle&savedInstanceState)&{
&&&&super.onCreate(savedInstanceState);
&&&&setContentView(R.layout.activity_main);
&&&&setupWindowAnimations();
private&void&setupWindowAnimations()&{
&&&&Explode&explode&=&new&Explode();
&&&&explode.setDuration(2000);
&&&&getWindow().setEnterTransition(explode);
}不管是代码还是xml的方式都会得到如下结果:一步步解释上面的过程:1.Activity A调用Activity B2.Transition框架发现A的Exit Transition(这里是explode效果的过渡动画)将其应用到所有的可见view。3.Transition框架发现B的Enter Transition (explode),将其应用到所有的可见view。4.点击返回的时候Transition 框架分别执行各自Enter与Exit的反向动画(因为它没有找到returnTransition和reenterTransition)。ReturnTransition & ReenterTransition这两个方法定义A的exit动画和B的enter动画的相反方向的动画,即A的进入与B的离开。我们就成为返回动画吧。在本例中,我们这样:MainActivity.java&&&&@Override
&&&&protected&void&onCreate(Bundle&savedInstanceState)&{
&&&&&&&&super.onCreate(savedInstanceState);
&&&&&&&&setContentView(R.layout.activity_main);
&&&&&&&&setupWindowAnimations();
&&&&private&void&setupWindowAnimations()&{
&&&&&&&&Explode&explode&=&new&Explode();
&&&&&&&&explode.setDuration(2000);
&&&&&&&&getWindow().setExitTransition(explode);
&&&&&&&&Fade&fade&=&new&Fade();
&&&&&&&&fade.setDuration(2000);
&&&&&&&&getWindow().setReenterTransition(fade);
&&&&}DetailActivity.java&&&&@Override
&&&&protected&void&onCreate(Bundle&savedInstanceState)&{
&&&&&&&&super.onCreate(savedInstanceState);
&&&&&&&&setContentView(R.layout.activity_main);
&&&&&&&&setupWindowAnimations();
&&&&private&void&setupWindowAnimations()&{
&&&&&&&&Explode&explode&=&new&Explode();
&&&&&&&&expl.setDuration(2000);
&&&&&&&&getWindow().setEnterTransition(explode);
&&&&&&&&Fade&fade&=&new&Fade();
&&&&&&&&fade.setDuration(2000);
&&&&&&&&getWindow().setReturnTransition(fade);&&&&&&&&
&&&&}设置了ReenterTransition和ReturnTransition之后,返回的两个动画就不是默认的了,而是设置的渐变动画。2.Activity间的共享元素共
享元素过度动画的背后是通过过度动画将两个不同布局中的不同view关联起来。Transition框架知道用适当的动画向用户展示从一个view向另外
一个view过度。请记住:共享元素过度的过程中,view并没有真正从一个布局跑到另外一个布局,整个过程基本都是在后一个布局中完成的。可以看到,这里有两个id分别为smallSquare和bigSquare的view,但是他们有相同的transitionName。这样Transition就知道此时需要创建一个从一个view到另外一个view的动画。MainActivity.javasquareBlue.setOnClickListener(new&View.OnClickListener()&{
&&&&@Override
&&&&public&void&onClick(View&v)&{
&&&&&&&&Intent&i&=&new&Intent(MainActivity.this,&DetailActivity2.class);
&&&&&&&&View&sharedView&=&squareB
&&&&&&&&String&transitionName&=&getString(R.string.square_blue_name);
&&&&&&&&ActivityOptions&transitionActivityOptions&=&ActivityOptions.makeSceneTransitionAnimation(MainActivity.this,&sharedView,&transitionName);
&&&&&&&&startActivity(i,&transitionActivityOptions.toBundle());
});layout/main_activity.xml&View
&&&&&&&&android:layout_margin=&10dp&
&&&&&&&&android:id=&@+id/square_blue&
&&&&&&&&android:layout_width=&50dp&
&&&&&&&&android:background=&@android:color/holo_blue_light&
&&&&&&&&android:transitionName=&@string/square_blue_name&
&&&&&&&&android:layout_height=&50dp&/&layou/details_activity2.xml&View
&&&&&&&&android:layout_width=&150dp&
&&&&&&&&android:id=&@+id/big_square_blue&
&&&&&&&&android:layout_margin=&10dp&
&&&&&&&&android:transitionName=&@string/square_blue_name&
&&&&&&&&android:layout_centerInParent=&true&
&&&&&&&&android:background=&@android:color/holo_blue_light&
&&&&&&&&android:layout_height=&150dp&&/&这段代码将产生如下的动画效果:可以看到Transition框架创建了一个让你感觉view在移动与变大的动画效果。为了证明blue square这个view并没有真正移动,我们可以做一个这样的实现:将transitioName赋予Big Blue Square上面的TextView。&TextView
&&&&&&&&android:layout_width=&wrap_content&
&&&&&&&&android:text=&Activity&Detail&2&
&&&&&&&&style=&@style/Base.TextAppearance.AppCompat.Large&
&&&&&&&&android:layout_centerHorizontal=&true&
&&&&&&&&android:transitionName=&@string/square_blue_name&
&&&&&&&&android:layout_above=&@+id/big_square_blue&
&&&&&&&&android:layout_height=&wrap_content&&/&运行之后你可以看到这次有相同的行为,但是作用在了一个不同的view上:3. 布局元素的过渡动画Transition框架还可以用于activity布局中view从一种状态到另一种状态的过渡动画。如果你想知道关于过渡动画的更多知识,请观看这个视频。本文尽量采用简单的例子TransitionManager.beginDelayedTransition(sceneRoot);这行代码告诉framework,我们将要做一些UI上的变化,这些变化需要相应的动画效果。对UI元素进行变更:setViewWidth(squareRed,&500);
setViewWidth(squareBlue,&500);
setViewWidth(squareGreen,&500);
setViewWidth(squareYellow,&500);这会改变相应view的属性,让其变大。Transition框架将记录开始和结束的的值,然后创建一个过渡动画。&squareGreen.setOnClickListener(new&View.OnClickListener()&{
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public&void&onClick(View&v)&{
&&&&&&&&&&&&&&&&TransitionManager.beginDelayedTransition(sceneRoot);
&&&&&&&&&&&&&&&&setViewWidth(squareRed,&500);
&&&&&&&&&&&&&&&&setViewWidth(squareBlue,&500);
&&&&&&&&&&&&&&&&setViewWidth(squareGreen,&500);
&&&&&&&&&&&&&&&&setViewWidth(squareYellow,&500);
&&&&&&&&&&&&}
&&&&&&&&});
&&&&private&void&setViewWidth(View&view,&int&x)&{
&&&&&&&&ViewGroup.LayoutParams&params&=&view.getLayoutParams();
&&&&&&&&params.width&=&x;
&&&&&&&&view.setLayoutParams(params);
&&&&}相关资料lex Lockwood发表了几篇关于Lollipop的transition的几篇文章,非常深入的讨论了这个话题 中文地址 & &Saul Molinero关于transition的比较完善的示例项目: Chet Hasse解释Transition framework的视频:
上一篇: 一个结合安卓源码解释java的几大设计模式的开源项目,下面是其主页对该项目的介绍: 该项目通过分析Android系统中的设计模式来提升大家对设计模式的理解,从源码的角度来剖析既增加了对Android系统本身的了解,也从优秀的设计中领悟模式的实际运用以及它适用
下一篇: 1 概述 Android 系统(本文以 Android 4.4 为准)的属性( Property )机制有点儿类似 Windows 系统的注册表,其中的每个属性被组织成简单的键值对( key/value )供外界使用。 我们可以通过在 adb shell 里敲入 getprop 命令来获取当前系统的所有属性内容,Android 动画之TranslateAnimation应用详解
字体:[ ] 类型:转载 时间:
本节讲解TranslateAnimation动画,TranslateAnimation比较常用,比如QQ,网易新闻菜单条的动画,就可以用TranslateAnimation实现,本文将详细介绍通过TranslateAnimation 来定义动画,需要的朋友可以参考下
android中提供了4中动画:
本节讲解TranslateAnimation动画,TranslateAnimation比较常用,比如QQ,网易新闻菜单条的动画,就可以用TranslateAnimation实现, 通过TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) 来定义动画 参数说明:
代码如下: float fromXDelta 动画开始的点离当前View X坐标上的差值 float toXDelta 动画结束的点离当前View X坐标上的差值 float fromYDelta 动画开始的点离当前View Y坐标上的差值 float toYDelta 动画开始的点离当前View Y坐标上的差值
代码如下: animation.setDuration(long durationMillis);//设置动画持续时间 animation.setRepeatCount(int i);//设置重复次数 animation.setRepeatMode(Animation.REVERSE);//设置反方向执行
代码如下: android:duration:运行动画的时间 android:repeatCount:定义动画重复的时间
代码如下: public class MainActivity extends Activity { ImageV B B @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); image = (ImageView) findViewById(R.id.main_img); start = (Button) findViewById(R.id.main_start); cancel = (Button) findViewById(R.id.main_cancel); /** 设置位移动画 向右位移150 */ final TranslateAnimation animation = new TranslateAnimation(0, 150,0, 0); animation.setDuration(2000);//设置动画持续时间 animation.setRepeatCount(2);//设置重复次数 animation.setRepeatMode(Animation.REVERSE);//设置反方向执行 start.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { image.setAnimation(animation); /** 开始动画 */ animation.startNow(); } }); cancel.setOnClickListener(new OnClickListener() { public void onClick(View v) { /** 结束动画 */ animation.cancel(); } }); } }
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具2042人阅读
【Android学习】(35)
Android提供了几种动画类型:View Animation、Drawable Animation、Property
Animation。
ViewAnimation相当简单,不过只能支持简单的缩放、平移、旋转、透明度基本的动画,且有一定的局限性。
Drawable Animation就是所谓的帧动画,一般作为Drawable的背景使用。
PropertyAnimation产生的原因,你希望View有一个颜色的切换动画;你希望可以使用<span style="color:#D旋转动画;你希望当动画停止时,View的位置就是当前的位置;这些View
Animation都无法做到。
二、使用方法
(1)View Animation(一个组件的动画)
&&&& a.采用定义xml动画,可以在一个set资源里面定义多种效果,使用这种方法时要注意里面的坐标的使用,是以当前组件的左上边为原点。可以使用X%p这种定义与父布局的关系。在代码中加载时用AnimationUtils.loadAnimation(context,
id);的方法得到动画并用组件的huoJianImageView.setAnimation();方法设置动画,启动动画时可以用得到的animation启动,也可以用组件的start的方法。
& & &b.采用java代码生成动画,TranslateAnimation,AlphaAnimation。生成动画以后的设置方法如前。
&(<span style="color:#)Drawable Animation(连续变化的动画)
&&&& 在Drawable里面定义animation-list然后作为一个组件的背景,在java代码中得到
AnimationDrawable animationDrawable = (AnimationDrawable) bullImageView.getBackground();
&& &&然后启动 animationDrawable.start()
&&&& 一般使用这种方法需要的注意的是控制该动画的最后一帧播放完毕,则组件消失。
&&&& 可自定义一个ImageView代码如下所示:
package com.animal.
import java.lang.reflect.F
import android.content.C
import android.graphics.C
import android.graphics.drawable.AnimationD
import android.util.AttributeS
import android.view.V
import android.widget.ImageV
public class MyImage extends ImageView {
AnimationDrawable animationD
int totalF
public void setAnimationDrawable(AnimationDrawable animationDrawable) {
this.animationDrawable = animationD
totalFrame = animationDrawable.getNumberOfFrames();
public MyImage(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
if (animationDrawable != null) {
field = AnimationDrawable.class.getDeclaredField(&mCurFrame&);
field.setAccessible(true);
int r = field.getInt(animationDrawable);
if (r == totalFrame - 1) {
setVisibility(View.INVISIBLE);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
super.onDraw(canvas);
&(<span style="color:#)Property Animation(属性动画)
&&& &a.不采用xml。()
&&&&&& 1)ObjectAnimator
&&&&&&&& &&&&ObjectAnimator.ofFloat(imageView, &rotationX&,0.0F, 360.0F).setDuration(500) .start();
&&&& &&2)ValueAnimator
public void paowuxian() {
ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.setDuration(3000);
valueAnimator.setObjectValues(new PointF(0, 0),new PointF(w, h));
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.setEvaluator(new TypeEvaluator&PointF&() {
// fraction = t / duration
public PointF evaluate(float fraction, PointF startValue,
PointF endValue) {
// Log.e(TAG, fraction * 3 + &&);
// x方向200px/s ,则y方向0.5 * 10 * t
PointF point = new PointF();
point.x = (w-imageView.getWidth())/(3) * fraction * 3;
point.y = 0.5f * 200 * (fraction * 3) * (fraction * 3);
valueAnimator.start();
valueAnimator.addUpdateListener(new AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
PointF point = (PointF) animation.getAnimatedValue();
imageView.setX(point.x);
imageView.setY(point.y);
& & &b.采用xml。()
&set xmlns:android=&/apk/res/android&
android:ordering=&together& &
&objectAnimator
android:duration=&3000&
android:propertyName=&y&
android:repeatCount=&infinite&
android:repeatMode=&reverse&
android:valueTo=&400&
android:valueType=&intType& &
&/objectAnimator&
&objectAnimator
android:duration=&3000&
android:propertyName=&x&
android:repeatCount=&infinite&
android:repeatMode=&reverse&
android:valueTo=&200&
android:valueType=&intType& &
&/objectAnimator&
class move {
public int getX() {
public void setX(int x) {
imageView.layout(x, imageView.getTop(),
x + imageView.getMeasuredWidth(), imageView.getBottom());
public int getY() {
public void setY(int y) {
imageView.layout(imageView.getLeft(), y, imageView.getRight(), y
+ imageView.getMeasuredHeight());
AnimatorSet animatorSet = (AnimatorSet) AnimatorInflater
.loadAnimator(getApplicationContext(),
R.animator.ani_sx);
animatorSet.setTarget(mo);
animatorSet.start();
&布局动画:
public class LayoutAniAct extends Activity implements OnCheckedChangeListener {
CheckBox born_It;
CheckBox born_Pa;
CheckBox die_It;
CheckBox die_Pa;
GridLayout gridV
LayoutTransition layoutT
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.layoutani);
born_It = (CheckBox) findViewById(R.id.born_It);
born_Pa = (CheckBox) findViewById(R.id.born_Pa);
die_It = (CheckBox) findViewById(R.id.die_It);
die_Pa = (CheckBox) findViewById(R.id.die_Pa);
gridView = (GridLayout) findViewById(R.id.gridView1);
button = (Button) findViewById(R.id.button1);
layoutTransition = new LayoutTransition();
gridView.setLayoutTransition(layoutTransition);
die_It.setOnCheckedChangeListener(this);
die_Pa.setOnCheckedChangeListener(this);
born_It.setOnCheckedChangeListener(this);
born_Pa.setOnCheckedChangeListener(this);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
final Button button = new Button(getApplicationContext());
button.setText((++n) + &&);
gridView.addView(button, Math.min(1, gridView.getChildCount()));
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
gridView.removeView(button);
int n = 0;
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
layoutTransition = new LayoutTransition();
layoutTransition.setAnimator(
LayoutTransition.APPEARING,
born_It.isChecked() ? layoutTransition
.getAnimator(LayoutTransition.APPEARING) : null);
layoutTransition.setAnimator(
LayoutTransition.CHANGE_APPEARING,
born_Pa.isChecked() ? layoutTransition
.getAnimator(LayoutTransition.CHANGE_APPEARING) : null);
layoutTransition.setAnimator(
LayoutTransition.DISAPPEARING,
die_It.isChecked() ? layoutTransition
.getAnimator(LayoutTransition.DISAPPEARING) : null);
layoutTransition.setAnimator(
LayoutTransition.CHANGE_DISAPPEARING,
die_Pa.isChecked() ? layoutTransition
.getAnimator(LayoutTransition.CHANGE_DISAPPEARING)
gridView.setLayoutTransition(layoutTransition);
&& & & & & &
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:108745次
积分:2001
积分:2001
排名:千里之外
原创:81篇
评论:23条
(1)(1)(1)(3)(6)(4)(1)(1)(3)(1)(2)(1)(4)(5)(1)(2)(3)(4)(9)(2)(4)(4)(7)(7)(3)(1)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'}

我要回帖

更多关于 安卓oncreate方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信