Android动画效果

Android动画

Animation动画

- Frame动画

- Tween动画

通常电影里面的画面持续时间长为一秒24帧

直接看代码吧

package com.example.myanimotor;

import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.animation.AnimatorSet;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button mButton1,mButton2,mButton3,mButton4,mButton5;
    private ImageView mImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton1= (Button) findViewById(R.id.btn_simple);
        mButton2= (Button) findViewById(R.id.btn_pro);
        mButton3= (Button) findViewById(R.id.btn_set);
        mButton4= (Button) findViewById(R.id.btn);
        mButton5= (Button) findViewById(R.id.btn1);
        mButton1.setOnClickListener(this);
        mButton2.setOnClickListener(this);
        mButton3.setOnClickListener(this);
        mButton4.setOnClickListener(this);
        mButton5.setOnClickListener(this);
        mImageView= (ImageView) findViewById(R.id.image_animator);
        mImageView.setImageResource(R.mipmap.kemi);
    }
//尽量把swith语句写简单
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_simple:
                ObjAnimator();
                break;
            case R.id.btn_pro:
                pvhAnimator();
                break;
            case R.id.btn_set:
                setAnimator();
                break;
            case R.id.btn:
                Intent intent=new Intent(MainActivity.this,SecActivity.class);
                startActivity(intent);
                break;
            case R.id.btn1:
                Intent intent1=new Intent(MainActivity.this,AnimationLayoutActivity.class);
                startActivity(intent1);
                break;
        }
    }
//多个动画按顺序加载
    private void setAnimator() {
        ObjectAnimator animator=new ObjectAnimator().ofFloat(mImageView,"rotationX",0,360);
        ObjectAnimator animator1=new ObjectAnimator().ofFloat(mImageView,"translationX",0,180);
        ObjectAnimator animator2=new ObjectAnimator().ofFloat(mImageView,"alpha",1.0f,0.0f,1.0f);
        ObjectAnimator animator3=new ObjectAnimator().ofFloat(mImageView,"scaleX",1.0f,0,1.0f);

        AnimatorSet animatorset=new AnimatorSet();

       // animatorset.playTogether(animator,animator1,animator2,animator3);
        animatorset.play(animator).after(animator3).after(animator1).after(animator2);
        animatorset.setDuration(2000);
        animatorset.start();
    }

    private void pvhAnimator() {
        PropertyValuesHolder holderX=PropertyValuesHolder.ofFloat("scaleX",1.0f,0.0f,1.0f);
        PropertyValuesHolder holderY=PropertyValuesHolder.ofFloat("scaleY",1.0f,0.0f,1.0f);
        PropertyValuesHolder ratota=PropertyValuesHolder.ofFloat("rotationX",0,360);
        ObjectAnimator animator=new ObjectAnimator().ofPropertyValuesHolder(mImageView,
                holderX,holderY,ratota).setDuration(4000);
        animator.start();
    }

    private void ObjAnimator() {
        ObjectAnimator animator=new ObjectAnimator().ofFloat(mImageView,"rotationX",0.0f,360.0f);
        animator.setDuration(4000);
        animator.start();
    }

}
package com.example.myanimotor;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LayoutAnimationController;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class SecActivity extends AppCompatActivity {
    private ListView mListView;
    private List<String> mList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sec);
        mListView= (ListView) findViewById(R.id.list_view);
        mList=new ArrayList<>();
        for (int i = 0; i <10 ; i++) {
            String str="测试数据"+i;
            mList.add(str);
        }
        ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,mList);
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.translateanimation);
        LayoutAnimationController lac = new LayoutAnimationController(animation);
        lac.setOrder(LayoutAnimationController.ORDER_NORMAL);
        lac.setDelay(0.7f);
        mListView.setLayoutAnimation(lac);
        mListView.setAdapter(adapter);
    }
}
package com.example.myanimotor;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.LayoutTransition;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.GridLayout;
import android.widget.LinearLayout;

public class AnimationLayoutActivity extends AppCompatActivity implements View.OnClickListener{
    private Button mButton;
    private CheckBox mCheckBox1,mCheckBox2,mCheckBox3,mCheckBox4;
    private GridLayout mGridLayout;
    private int index=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animation_layout);
        mButton= (Button) findViewById(R.id.btn_add);
        mButton.setOnClickListener(this);
        mCheckBox1= (CheckBox) findViewById(R.id.checkbox_appear);
        mCheckBox2= (CheckBox) findViewById(R.id.checkbox_disappear);
        mCheckBox3= (CheckBox) findViewById(R.id.checkbox1);
        mCheckBox4= (CheckBox) findViewById(R.id.checkbox2);
        mGridLayout= (GridLayout) findViewById(R.id.grid_view);
        //刚开始这个地方调用了该方法,运行虽然没错,但是点击跳转时只出现一条测试数据,点击添加数据时也没有
        //任何反应。总结:不能在这里调用方法,而需要在添加按钮的点击事件里调用方法
       // addViewToGrid();
    }
  //给gridview添加控件
    private void addViewToGrid() {
        //给一个下标,否则每次都是第一个数据
        index++;
        //button为给gridview添加的控件,这里的控件可以随便写,如TextView,edittext之类的
        Button button=new Button(this);
        //给控件设置宽高
        button.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        button.setText("测试数据"+index);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mGridLayout.setLayoutTransition(getLayoutTransition());
                mGridLayout.removeView(v);
            }
        });
        mGridLayout.setLayoutTransition(getLayoutTransition());
        mGridLayout.addView(button,mGridLayout.getChildCount()>0?1:0);
    }
    private LayoutTransition getLayoutTransition(){
         LayoutTransition transition=new LayoutTransition();
        ObjectAnimator appear=new ObjectAnimator().ofInt(mGridLayout,"scaleX",0,1);
        ObjectAnimator disappear=new ObjectAnimator().ofInt(mGridLayout,"scaleX",1,0);
        if (mCheckBox1.isChecked()){
            transition.setAnimator(LayoutTransition.APPEARING,appear);
        }if(mCheckBox2.isChecked()){
            transition.setAnimator(LayoutTransition.DISAPPEARING,disappear);
        }if(mCheckBox3.isChecked()){
            PropertyValuesHolder pvhLeft=PropertyValuesHolder.ofInt("left",0,1);
            PropertyValuesHolder pvhTop=PropertyValuesHolder.ofInt("top",0,1);
            PropertyValuesHolder pvhRight=PropertyValuesHolder.ofInt("right",0,1);
            PropertyValuesHolder pvhButtom=PropertyValuesHolder.ofInt("bottom",0,1);
            PropertyValuesHolder holderX=PropertyValuesHolder.ofFloat("scaleX",1,0,1);
            PropertyValuesHolder holderY=PropertyValuesHolder.ofFloat("scaleY",1,0,1);
            ObjectAnimator change_appear=new ObjectAnimator().ofPropertyValuesHolder(this,pvhLeft,
                    pvhRight,pvhButtom,pvhTop,holderX,holderY);
            change_appear.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationStart(Animator animation) {
                    View view=(View)((ObjectAnimator)animation).getTarget();
                    view.setScaleX(1);
                    view.setScaleY(1);

                }
            });
            transition.setDuration(1000);
            transition.setAnimator(LayoutTransition.CHANGE_APPEARING,change_appear);

        }
        if (mCheckBox4.isChecked()){

        }
        return transition;
    }

    @Override
    public void onClick(View v) {
       switch (v.getId()){
           case R.id.btn_add:
               addViewToGrid();
               break;
       }
    }
}

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:delay="0.5"
    android:animationOrder="normal"
    android:animation="@anim/translateanimation">

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

<?xml version="1.0" encoding="utf-8"?>
<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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.myanimotor.AnimationLayoutActivity"
    android:orientation="vertical">
  <Button
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:id="@+id/btn_add"
      android:text="添加一条数据"
      android:textSize="20sp"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btn_delete"
        android:textSize="20sp"/>
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/checkbox_appear"
        android:text="出现新的控件"
        android:textSize="20sp"
        />
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/checkbox_disappear"
        android:text="出现新的view,其他控件的动画"
        android:textSize="20sp"
        />
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/checkbox1"
        android:text="即将消失的view动画"
        android:textSize="20sp"
        />
    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/checkbox2"
        android:text="出现新的控件"
        android:textSize="20sp"
        />
    <GridLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/grid_view"
        android:columnCount="1">

    </GridLayout>

</LinearLayout>

强调内容

四种补间动画都需要在res文件夹下新建anim文件夹,里面放置动画的xml文件

时间: 2024-11-07 04:35:53

Android动画效果的相关文章

Android动画效果——1.帧动画2.补间动画3.跳转画面(三)

Android--动画效果1.帧动画2.补间动画3.跳转画面 插值器类 xml属性值 说明 LinearInterpolator @android:anim/linear_interpolatorr 动画以均匀的速度改变. AccelerateInterpolator @android:anim/accelerate_interpolator 在动画开始时改变速度较慢,然后开始加速. AccelerateDecelerateInterpolator @android:anim/accelerat

Android动画效果之Frame Animation(逐帧动画)(二)(

前言: 上一篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画),今天来总结下Android的另外一种动画Frame Animation(逐帧动画). Frame Animation(逐帧动画): 逐帧动画(Frame-by-frame Animations)从字面上理解就是一帧挨着一帧的播放图片,就像放电影一样.和补间动画一样可以通过xml实现也可以通过java代码实现.接下来借助目前项目中的一个开奖的动画来总结

200多种Android动画效果的强悍框架

admin 发布于2015-10-23 14:33 363/68015 [精品推荐]200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^ 功能模块和技术方案 只看楼主 楼层直达 200多种Android动画效果的强悍框架,太全了 概要: Android近200多种动画效果集合框架源码,太全了,总有你需要的,木有你找不到的,相当强悍,非常棒的产品开发原型参考和学习资料 主要功能列表: 1)Splash动画 (中心打开式效果 ) 2)Flip折叠效果的集合(1

Android动画效果之初识Property Animation(属性动画)(三)

前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Android动画效果之Frame Animation(逐帧动画)(二),其实总结前两个的根本目的就是为了学习今天的主角Property Animation(属性动画).其实在Android最早期只提供了前两种动画方式,在Android 3.0才引入了属性动画,谷歌为何要引入属性动画呢?今天我们来总结学习一

Android动画效果之Frame Animation(逐帧动画)

前言: 上一篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画),今天来总结下Android的另外一种动画Frame Animation(逐帧动画). 其他几种动画效果: Android动画效果之Tween Animation(补间动画) Android动画效果之Frame Animation(逐帧动画) Android动画效果之初识Property Animation(属性动画) Android动画效果之Prop

android动画效果演示

第一种:TranslateAnimation  动画效果演示: public void move(View view) { // 传统动画效果 TranslateAnimation animation=new TranslateAnimation(0, 500, 0, 0); // 时间 animation.setDuration(500); // 设置移动后的位置不恢复 animation.setFillAfter(true); ImageButton img=(ImageButton) fi

Android动画效果translate、scale、alpha、rotate详解

动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 JavaCode中 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸伸缩动画效果 TranslateAnimation 画面转换位置移动动画效果 RotateAnimation 画面转移旋转动画效果 Android动画模式 Animation

Android动画效果之Tween Animation(补间动画)(一)

前言: 最近公司项目下个版本迭代里面设计了很多动画效果,在以往的项目中开发中也会经常用到动画,所以在公司下个版本迭代开始之前,抽空总结一下Android动画.今天主要总结Tween Animation(补间动画). Tween Animation(补间动画): Tween动画,通过对View的内容进行一系列的图形变换 (包括平移.缩放.旋转.改变透明度)来实现动画效果.动画效果的定义可以采用XML来做也可以采用编码来做. 动画类型 XML配置方式 Java代码实现方式 渐变透明度动画效果 <al

android动画效果(转载)

一.动画基本类型: 如下表所示,Android的动画由四种类型组成,即可在xml中定义,也可在代码中定义,如下所示: XML CODE 渐变透明度动画效果 alpha AlphaAnimation 渐变尺寸伸缩动画效果 scale ScaleAnimation 画面转换位置移动动画效果 translate TranslateAnimation 画面转移旋转动画效果 rotate RotateAnimation 二.如何在XML文件中定义动画 1.alpha <?xml version="1

Android动画效果translate、scale、alpha、rotate

动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 JavaCode中 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸伸缩动画效果 TranslateAnimation 画面转换位置移动动画效果 RotateAnimation 画面转移旋转动画效果 Android动画模式 Animation