ai动画 android
2017-07-17 13:58:07 lotusve 阅读数 321

Android 动画 (Animation)

1. Android 动画总结




附一:

1. Property Animation


2. View Animation

包:android.view.animation

动画xml位置:res/anim/

插值器:Interpolator


3. Drawable Animation

类:android.graphics.drawable.AnimationDrawable

动画xml位置:res/drawable/



附二:

1. Animation Resources












2016-01-05 11:46:42 xxssyyyyssxx 阅读数 164

> Frame动画,即顺序播放事先做好的图像,跟电影类似。开发步骤:

1)把准备好的图片放进项目res/drawable下。

2)在项目的res目录下创建文件夹anim,然后在anim文件夹下面定义动画XML文件,文件名称可以自定义。当然也可以采用编码方式定义动画效果(使用AnimationDrawable类)。

3)为View控件绑定动画效果。调用代表动画的AnimationDrawablestart()方法开始动画。


<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/girl_1" android:duration="200" />
    <item android:drawable="@drawable/girl_2" android:duration="200" />
    <item android:drawable="@drawable/girl_3" android:duration="200" />
    <item android:drawable="@drawable/girl_4" android:duration="200" />
    <item android:drawable="@drawable/girl_5" android:duration="200" />
    <item android:drawable="@drawable/girl_6" android:duration="200" />
    <item android:drawable="@drawable/girl_7" android:duration="200" />
    <item android:drawable="@drawable/girl_8" android:duration="200" />
    <item android:drawable="@drawable/girl_9" android:duration="200" />
    <item android:drawable="@drawable/girl_10" android:duration="200" />
    <item android:drawable="@drawable/girl_11" android:duration="200" />
</animation-list>


public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        TextView textView = (TextView) this.findViewById(R.id.textView);
        textView.setBackgroundResource(R.drawable.frame);//绑定Frame动画图形
        final AnimationDrawable drawable = (AnimationDrawable) textView.getBackground();
        
        getMainLooper().myQueue().addIdleHandler(new MessageQueue.IdleHandler() {            
            public boolean queueIdle() {
                drawable.start();//启动动画
                return false;
            }
        });

        
    }
}




总结

1)把准备好的图片放进项目res/ drawable下。

   图片有:girl_1.gif, girl_2.gif, girl_3.gif

2)在项目的res目录下创建文件夹anim,然后在anim文件夹下面定义动画XML文件,文件名称可以自定义,如:frame.xml

<?xmlversion="1.0" encoding="utf-8"?>

<animation-listxmlns:android="http://schemas.android.com/apk/res/android"

    android:oneshot="false">

    <item android:drawable="@drawable/girl_1" android:duration="200"/>

    <item android:drawable="@drawable/girl_2" android:duration="200"/>

    <item android:drawable="@drawable/girl_3" android:duration="200"/>

</animation-list>

上面的XML就定义了一个Frame动画其包含3帧动画,3帧动画中分别应用了drawable中的3张图片:girl_1.gif, girl_2.gif, girl_3.gif每帧动画持续200毫秒。android:oneshot属性如果为true表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。

3)为View控件绑定动画效果,调用代表动画的AnimationDrawablestart()方法开始动画。

publicclass FrameActivity extendsActivity {

  private AnimationDrawableanimationDrawable;

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  ImageViewimageView = (ImageView)this.findViewById(R.id.imageView);

  imageView.setBackgroundResource(R.anim.frame);

  animationDrawable = (AnimationDrawable) imageView.getBackground();

  }

  @Override

  public booleanonTouchEvent(MotionEvent event) {

    if (event.getAction() == MotionEvent.ACTION_DOWN) {//按下

    animationDrawable.start();

    returntrue;

    }

    returnsuper.onTouchEvent(event);

  }

}

有一点需要强调的是:启动Frame动画的代码animationDrawable.start();不能应用在OnCreate()方法中,因为在OnCreate()AnimationDrawable还没有完全的与ImageView绑定。在OnCreate()中启动动画,只能看到第一张图片。这里在拖曳事件中实现的。


2016-01-05 11:32:55 xxssyyyyssxx 阅读数 145

> Tween动画,通过对View的内容进行一系列的图形变换(包括平移、缩放、旋转、改变透明度)来实现动画效果。动画效果的定义可以采用XML来做也可以采用编码来做。Tween动画有4种类型:

在res/anim文件夹下简历XML文件

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
       // Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha);//使用alpha.xml生成动画效果对象
       // Animation animation = AnimationUtils.loadAnimation(this, R.anim.translate);
       // Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale);
       // Animation animation = AnimationUtils.loadAnimation(this, R.anim.rotate);

       
       /* Animation animation = new RotateAnimation(0, 360,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        animation.setDuration(5000);*/
       
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.itcast);//编码定义动画效果
       
        animation.setFillAfter(true);

        ImageView imageView = (ImageView) this.findViewById(R.id.imageView);
        imageView.startAnimation(animation);
    }
}


alpha.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0"
        android:duration="5000"
     />
</set>


translate.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
     <translate
        android:fromXDelta="0"
        android:fromYDelta="0"
       
        android:toXDelta="100"
        android:toYDelta="100"
       
        android:duration="5000"
         />
</set>


scale.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
 
  <scale
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        
        android:toXScale="5.0"
        android:toYScale="5.0"
       
        android:pivotX="50%"
        android:pivotY="50%"
       
        android:duration="5000"
         />
        
</set>


rotate.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
 <rotate
        android:fromDegrees="0"
       
        android:toDegrees="180"
       
        android:pivotX="50%"
        android:pivotY="50%"
      
       android:duration="5000"
         />
</set>


综合itcast.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0"
        android:duration="5000"
     />
    <rotate
        android:fromDegrees="0"
       
        android:toDegrees="180"
       
        android:pivotX="50%"
        android:pivotY="50%"
      
       android:duration="5000"
         /> 
   
    <translate
        android:fromXDelta="0"
        android:fromYDelta="0"
       
        android:toXDelta="50"
        android:toYDelta="50"
       
        android:duration="5000"
         />
   
     <scale
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        
        android:toXScale="5.0"
        android:toYScale="5.0"
       
        android:pivotX="50%"
        android:pivotY="50%"
       
        android:duration="5000"
         />     
</set>



总结

本例要实现对ImageView对象进行渐变尺寸缩放动画效果

1> 在项目的res目录下创建文件夹anim,然后在anim文件夹下面定义动画XML文件,文件名称可以自定义,如:scale.xml,内容如下:

<?xmlversion="1.0" encoding="utf-8"?>

 <set xmlns:android="http://schemas.android.com/apk/res/android">

    <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"

        android:fromXScale="0.0" 

        android:toXScale="5"

        android:fromYScale="0.0"

        android:toYScale="5"

        android:pivotX="50%"

        android:pivotY="50%"

        android:fillAfter="false"

        android:duration="5000"

        />

</set>

动画的进度使用interpolator控制,android提供了几个Interpolator子类,实现了不同的速度曲线,如LinearInterpolator实现了匀速效果、Accelerateinterpolator实现了加速效果、DecelerateInterpolator实现了减速效果等。还可以定义自己的Interpolator子类,实现抛物线、自由落体等物理效果。

fromXScale(浮点型) 属性为动画起始时X坐标上的缩放尺寸

fromYScale(浮点型) 属性为动画起始时Y坐标上的缩放尺寸

toXScale(浮点型)  属性为动画结束时X坐标上的缩放尺寸

toYScale(浮点型)  属性为动画结束时Y坐标上的缩放尺寸

说明: 以上四种属性值

0.0表示收缩到没有

1.0表示正常无缩放

值小于1.0表示收缩

值大于1.0表示放大

pivotX(浮点型)    属性为动画相对于物件的X坐标的开始位置

pivotY(浮点型)     属性为动画相对于物件的Y坐标的开始位置

说明:

以上两个属性值 从0%-100%中取值

50%为物件的XY方向坐标上的中点位置

duration(长整型)属性为动画持续时间 。说明:  时间以毫秒为单位

fillAfter(布尔型)属性当设置为true,该动画转化在动画结束后被应用

2> layout文件添加<ImageView>节点:

<?xmlversion="1.0" encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="horizontal"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<ImageView

   android:layout_width="wrap_content"

   android:layout_height="wrap_content"

   android:src="@drawable/icon"

   android:id="@+id/imageView"

   />

</LinearLayout>

说明:除了可以对<ImageView>实现动画效果,其实也可以对其他View实现动画效果,如:<TextView>

3>Activity里对ImageView使用前面定义好的动画效果:

publicclass AnimationActivity extendsActivity {

  @Override

  public void onCreate(BundlesavedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  ImageViewimageView = (ImageView)this.findViewById(R.id.imageView);

  //加载动画XML文件,生成动画指令

  Animation animation =AnimationUtils.loadAnimation(this,R.anim.scale);

  //开始执行动画

  imageView.startAnimation(animation);

  }

}

备注:上面采用的是xml文件定义动画效果,作为代替,也可以采用编码方式实现。下面采用编码方式实现上述例子同样的效果:

publicclass AnimationActivity extendsActivity {

  @Override

  public void onCreate(BundlesavedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  ImageViewimageView = (ImageView)this.findViewById(R.id.imageView);

  ScaleAnimationanimation =new ScaleAnimation(0.0f, 5f, 0.0f, 5f,

  Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);

  animation.setDuration(5000);//设置持续时间5

  imageView.startAnimation(animation);

  }

}


2016-11-20 21:46:52 Luze_1226 阅读数 185

Android 动画之activity动画

           前面和大家简单分析了Android的控件的动画效果(补间动画和属性动画)。但是在开发过程中我们发现:控件的动画效果做的很好,但是在页面跳转的时候很不自然,我们寻求一种让用户有一种渐进的效果,我看开始使用页面之间的动画效果,也就是Activity之间的动画效果,给用户一种很自然的感觉。
       在Android的Activity之间的动画效果的实现方式比较多,在这里之列举出部分实现方法。
       说道动画我们首先想到的是控件的简单的动画效果——补间动画,使用补间动画我们一般会使用xml文件定义动画的过程,属性分别是:alpha,rotate,scale,translate。同样的activity之间的简单动画效果也可以使用这四个属性来定义动画的过程,我定义了两个动画效果,分别是活动的进入动画和活动的退出动画。
     slide_in_right——从右边进入的动画效果代码如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    >
<translate
    android:fromXDelta="100%"
    android:toXDelta="0.0"
    ></translate>
    
</set>
     slide_out_left——从左边出去的动画过程:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300">
<translate
    android:fromXDelta="0.0"
    android:toXDelta="-100%"
    ></translate>
</set>
好了,关于activity进入和退出的动画过程已经配置好了,现在我们需要做的就是让activity如何按照我们配置的动画过程执行动画,显示动画效果出来。在执行动画之前我们要了解清楚动画效果在哪里产生效果:

在介绍activity的切换动画之前我们先来说明一下实现切换activity的两种方式:

  • 调用startActivity方法启动一个新的Activity并跳转其页面

  • 调用finish方法销毁当前的Activity返回上一个Activity界面

当调用startActivity方法的时候启动一个新的activity,这时候就涉及到了旧的Activity的退出动画和新的Activity的显示动画; 
当调用finish方法的时候,销毁当前Acitivity,就涉及到了当前Activity的退出动画和前一个Activity的显示动画;

所以我们的activity跳转动画是分为两个部分的:一个Activity的销毁动画与一个Activity的显示动画,明白了这一点之后我们开始看一下第一种实现Activity跳转动画的方式:通过overridePendingTransition方法实现Activity切换动画。

一  、overridePendingTransition

这种方式很简单的,它会在startactivity和finish方法后执行

intent.setClass(this,SecondActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);
二 、使用style方式实现切换动画

<style name="SWIPE" parent="AppTheme">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowAnimationStyle">@style/ActivityAnim</item>
    </style>
<style name="ActivityAnim">
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
</style>
我们通过style定义了windowAnimotionStyle的动画过程,我们再来了解下windowA你motion的四种动画:

activityOpenEnterAnimation // 用于设置打开新的Activity并进入新的Activity展示的动画

activityOpenExitAnimation // 用于设置打开新的Activity并销毁之前的Activity展示的动画

activityCloseEnterAnimation // 用于设置关闭当前Activity进入上一个Activity展示的动画

activityCloseExitAnimation // 用于设置关闭当前Activity时展示的动画

最后我们在配置文件中配置activity的动画主题

<activity android:name=".ThreeActiviyt"
    android:theme="@style/SWIPE"></activity>
这两种activity之间的切换动画实现方式比较简单,其实在Android5.0之后,对于动画的效果有所提高,新的实现方式已经有了,但是我没有了解很多,就说到这里,有朋友想了解更多的有关切换动画的实现可以看看这篇文章

2014-11-09 15:48:55 mynameisIT 阅读数 262

Tween动画  又叫"补间动画"    或者"中间动画".

Tween动画分为4种  即 AlphaAnimation(透明度动画)、TranslateAnimation(平移动画)、ScaleAnimation(缩放动画)、RotateAnimation(旋转动画)

从字面看就可以大概了解动画形式了、他们都继承自android.view.Animation类、实现方法有 Javacode(java源代码)、XML(xml配置文件)。

现在 、 我们一个个来解析吧。 

 AlphaAnimation(透明度动画):就是通过改变组件的透明度来实现动画效果的。

          XML属性:

                android:fromAlpha="0.1f "  ------------fromAlpha为起始透明度  为Float型

               android:toAlpha=“1.0f "  -------------toAlpha为结束透明度  也为Float型

               android:duration = ”4000“        ********属性为动画持续时间  4000毫秒

       Java源代码:

             AlphaAnimation有两个构造函数

         1.  AlphaAnimation(Context contex、AttributeSet attrs)第一参数为上下文环境、第二个参数是个属性集、用来自定义控件使用AttributeSet来完成控          件类       的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来.

           2.AlphaAnimation( float  fromAlpha ,  flaot toAlpha)    这两个参数都为浮点型

TranteAnimation(平移动画)

               有三个构造函数

            1:TranteAnimation (Context context、AttributeSet   attrs) 同上 略过

          2:TrantAnimation (float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) 

                    fromXDelta:表示动画开始的点 与当前ViewX轴坐标的差值              

                toXDelta:表示动画结束的点 与当前ViewX轴坐标的差值   

                    fromYDelta:表示动画开始的点 与当前ViewY轴坐标的差值   

               float toYDelta:表示动画结束的点 与当前ViewY轴坐标的差值 

3:ScaleAnimation(缩放动画)

           有四个构造函数

                          ScaleAnimation(Context  context 、AttributeSet attrs) 同上 略过

                          ScaleAnimation(float fromX,float toX,float fromY,float toY)第一二个参数为X轴的起始 、结束坐标    第三四个参数为Y轴的起始、结束坐标

                         ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY):前面四个不讲 后面两个

                                                pivot 意思是枢轴 、支点   float pivotX, float pivotY   为动画相对于组件的X、Y坐标的开始位置、从0%~100%取值

                           ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float                                                 pivotYValue):    

 4:RotateAnimation:  有四个构造函数

                1:RotateAnimation(Context Context 、 AttributeSet attrs)  同上 略过

                2:RotateAnimation(float fromdDegress 、 float  toDegress)  参数为开始的角度 和结束的角度                                             

                                             例:RotateAnimation(10.0f,90.0f) 就是从10度旋转到90度

                  3:RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)  参照上面讲解

               RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float   pivotYValue) 参照上面 不废话了                                            

         

package com.android.my5;


import android.app.Activity;


import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;     

public class MainActivity extends Activity {
    private Button  start; //定义开始按钮
    private Animation animation;  //动画效果
    private ImageView image;  //实行动画的图片
    private Spinner spinner;  //定义动画类型下拉选项
    String[] string = {"平移动画","透明度动画","旋转动画","缩放动画"};  //定义一个String数组组成下拉列表的选项
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //分别通过Id获取组件
        spinner = (Spinner)findViewById(R.id.spinner);
        image = (ImageView)findViewById(R.id.image);
        start = (Button)findViewById(R.id.button);
        //定义一个适配器
        ArrayAdapter adapter = new ArrayAdapter(MainActivity.this,android.R.layout.simple_spinner_item,string);
        spinner.setAdapter(adapter);  //spinner 设置适配器
        //为start绑定监听器
        start.setOnClickListener(new OnClickListener() {


public void onClick(View v) {
InitialAnimation();
image.startAnimation(animation);
}
});
    }
    //定义动画方法
    public void InitialAnimation(){
    switch(spinner.getSelectedItemPosition()){
    case 0:
    animation = new TranslateAnimation(0,0,120,300); //实例化动画为平移动画  第一个和第二个参数对映着X轴的开始 结束坐标   第三个和第四个对映着Y轴的
    break;
    case 1:
    animation = new AlphaAnimation(0.1f,1.0f);  //透明度动画  参数为FLoat型  开始透明度和最后透明度
    break;
    case 2:
    //动画效果为旋转动画  参数为Float型   第一个参数为开始角度   第二个为最后角度
    animation =  new RotateAnimation(0, 10,150,150); 
    break;
    case 3:
    //动画效果为缩放动画  前两个参数为X轴的起始、结束坐标  后两个为Y轴的起始和结束坐标
    animation = new ScaleAnimation(0.0f, 2.0f, 0.0f, 2.0f);
    break;
    }
    animation.setDuration(4000);  //设置动画完成需要的时间
    }
}

xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="${packageName}.${activityClass}" >


    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
   <Button
       android:id="@+id/button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:background="@drawable/button"
       android:textColor="#f00"
       android:shadowColor="#0f0"
       android:text="开始播放"/>
   <ImageView 
       android:id="@+id/image"
       android:layout_width="150dp"
       android:layout_height="150dp"
       android:layout_gravity="center_horizontal"
       android:src="@drawable/bar"
       />
</LinearLayout>


          

android 动画 -- tween动画

阅读数 193

先看一下android动画框架:tween动画详解:tween动画可以实现让某个控件展现出旋转,渐变,移动,缩放的一种转换过程,当然,这些单独的动画也可以组合一起来使用,可以打造一些适用的效果。主要类AnimationAlphaAnimation--渐变透明度RotateAnimation--旋转ScaleAnimation--缩放TranslateAnimation

博文 来自: snailpeople

动画——Android弹出菜单动画

阅读数 600

最近项目需要在底部按钮点击弹出菜单,再点击菜单隐藏,如下图:先上代码:XML文件直接将图片叠在一起,点击图片在最上面:&lt;RelativeLayoutxmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;xmlns:tools=&quot;http://schemas.android.com/tools&quot;a

博文 来自: wang_k516

Android 动画之View动画

阅读数 32

简介Android动画主要有三种类型:View动画、帧动画和属性动画。其中,帧动画也是View动画的一种,它通过顺序播放一系列图像而产生动画效果,只不过它和一般的平移、旋转等View动画在表现形式上略有不同。而属性动画是API11的新特性,在Android3.0以下版本的手机中无法使用。下面主要介绍View动画。View动画是一种作用于View对象的...

博文 来自: weixin_34148340

android 动画

阅读数 341

要实现的效果如图:代码很简单,主要是TranslateAnimation类的publicTranslateAnimation(intfromXType,floatfromXValue,inttoXType,floattoXValue,intfromYType,floatfromYValue,inttoYType,floattoYValue)

博文 来自: EvoShark

Android 动画

阅读数 268

Android动画分类总的来说,Android动画可以分为两类,最初的传统动画和Android3.0之后出现的属性动画(PropertyAnimation);传统动画又包括帧动画(FrameAnimation)和补间动画(TweenedAnimation)。

博文 来自: asd199205
没有更多推荐了,返回首页