LayoutAnimationController,补间动画,属性动画,值动画,自定义动画,帧动画

最好的代码永远是自己写出来的

布局
<?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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.liuan.animation.MainActivity">

    <ScrollView
        android:fadeScrollbars="true"
        android:layout_width="match_parent"
        android:layout_height="250dp">

        <LinearLayout
            android:id="@+id/ll_amimation"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="vertical">

            <Button
                android:id="@+id/bt_alpha"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="7dp"
                android:text="透明度动画Alpha" />

            <Button
                android:id="@+id/bt_Rotate"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="7dp"
                android:text="旋转动画Rotate" />

            <Button
                android:id="@+id/bt_Translate"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="7dp"
                android:text="位移动画Translate" />

            <Button
            android:id="@+id/bt_Scale"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="7dp"
            android:text="缩放动画Scale" />
            <Button
                android:id="@+id/bt_Object"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="7dp"
                android:text="属性动画Object" />
            <Button
                android:id="@+id/bt_Value"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="7dp"
                android:text="值动画" />

            <Button
                android:id="@+id/bt_Set"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="7dp"
                android:text="补间/属性动画合集set" />
            <Button
                android:id="@+id/bt_tv"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="7dp"
                android:text="自定义动画TV" />
            <Button
                android:id="@+id/bt_3d"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="7dp"
                android:text="自定义3d动画" />




        </LinearLayout>

    </ScrollView>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:layout_centerInParent="true"
            android:id="@+id/imageview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:src="@mipmap/ic_launcher" />

    </RelativeLayout>

</LinearLayout>
mainActivity
package com.example.liuan.animation;

import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.LayoutAnimationController;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {

    @Bind(R.id.bt_alpha)
    Button btAlpha;
    @Bind(R.id.bt_Rotate)
    Button btRotate;
    @Bind(R.id.bt_Translate)
    Button btTranslate;
    @Bind(R.id.bt_Scale)
    Button btScale;
    @Bind(R.id.ll_amimation)
    LinearLayout llAmimation;
    @Bind(R.id.imageview)
    ImageView imageview;
    @Bind(R.id.activity_main)
    LinearLayout activityMain;
    @Bind(R.id.bt_Object)
    Button btObject;
    @Bind(R.id.bt_Value)
    Button btValue;
    @Bind(R.id.bt_Set)
    Button btSet;
    @Bind(R.id.bt_tv)
    Button btTv;
    @Bind(R.id.bt_3d)
    Button bt3d;
    private int animationDuration = 2000;
    private boolean isViewSet=true;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        imageview.setImageResource(R.mipmap.ic_launcher);
        //为布局设置动画时间
        ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1, 0, 1);
        scaleAnimation.setDuration(animationDuration);
        //设置布局动画的显示属性
        LayoutAnimationController lac = new LayoutAnimationController(scaleAnimation, 0.5f);
        //设置View显示的顺序
        //匀速ORDER_NORMAL
        //随机ORDER_RANDOM
        //反顺序
        lac.setOrder(LayoutAnimationController.ORDER_REVERSE);
        //为ViewGroup设置布局动画
        activityMain.setLayoutAnimation(lac);



    }

    @OnClick({R.id.bt_alpha, R.id.bt_Rotate, R.id.bt_Translate, R.id.bt_Scale, R.id.bt_Object, R.id.bt_Value, R.id.bt_Set, R.id.bt_tv,R.id.bt_3d})
    public void onClick(View view) {
        switch (view.getId()) {

            case R.id.bt_alpha:
//                Toast.makeText(MainActivity.this, "getWidth"+imageview.getWidth()+"getHeight"+imageview.getHeight(), Toast.LENGTH_SHORT).show();
                AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
                alphaAnimation.setDuration(animationDuration);
                imageview.startAnimation(alphaAnimation);
                break;
            case R.id.bt_Rotate:
                RotateAnimation ra = new RotateAnimation(0, 360, imageview.getX() / 2, imageview.getY() / 2);
                ra.setDuration(animationDuration);
                imageview.startAnimation(ra);
                break;
            case R.id.bt_Translate:
                TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, imageview.getX(), imageview.getY());
                translateAnimation.setDuration(animationDuration);
                imageview.startAnimation(translateAnimation);
                break;
            case R.id.bt_Scale:
                ScaleAnimation scaleAnimation = new ScaleAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 360, Animation.RELATIVE_TO_SELF, 0.5F, Animation.RELATIVE_TO_SELF, 0.5F);
                scaleAnimation.setDuration(animationDuration);
                imageview.startAnimation(scaleAnimation);
                break;
            case R.id.bt_Object:

                //属性动画不会改变实际位置
                ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageview,
                        "translationX", 300);
                objectAnimator.setDuration(animationDuration);
                objectAnimator.start();
                objectAnimator.addListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animation) {

                    }

                    @Override
                    public void onAnimationEnd(Animator animation) {
                        ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(imageview,
                                "translationX", 0);
                        objectAnimator2.setDuration(animationDuration);
                        objectAnimator2.start();
                    }

                    @Override
                    public void onAnimationCancel(Animator animation) {

                    }

                    @Override
                    public void onAnimationRepeat(Animator animation) {

                    }
                });


                break;
            case R.id.bt_Value:
                ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 10);
                valueAnimator.setTarget(imageview);
                valueAnimator.setDuration(10 * 1000);
                valueAnimator.setInterpolator(new LinearInterpolator());

                valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

                    private AlertDialog dialog;
                    private AlertDialog.Builder builder;

                    @Override
                    public void onAnimationUpdate(ValueAnimator animation) {
                        int animatedValue = (int) animation.getAnimatedValue();
                        if (builder == null) {
                            builder = new AlertDialog.Builder(MainActivity.this);
                        }
                        if(dialog==null) {
                            dialog = builder.create();
                        }
                        dialog.setTitle("值动画");
                        dialog.setMessage("" + animatedValue);
                        if (animatedValue == 10) {
                            dialog.dismiss();
                            return;
                        }
                        dialog.show();


                    }
                });
                valueAnimator.start();
                break;
            case R.id.bt_Set:

                if(isViewSet){
                    Toast.makeText(this, "这是补间动画的合集", Toast.LENGTH_SHORT).show();
                AnimationSet set=new AnimationSet(true);
                set.setDuration(animationDuration);
                AlphaAnimation alphaAnimation1 = new AlphaAnimation(0, 1);
                alphaAnimation1.setDuration(animationDuration);
                set.addAnimation(alphaAnimation1);

                TranslateAnimation ta = new TranslateAnimation(0, 100, 0, 200);
                ta.setDuration(animationDuration);
                set.addAnimation(ta);

                imageview.startAnimation(set);
                }else{
                    Toast.makeText(this, "这是属性动画的合集", Toast.LENGTH_SHORT).show();
                    AnimatorSet set=new AnimatorSet();
                    set.setDuration(animationDuration);

                    ObjectAnimator oa1=ObjectAnimator.ofFloat(imageview,"translationY",0,300,0);
                    ObjectAnimator oa2=ObjectAnimator.ofFloat(imageview,"scaleX",1f,0f,1f);
                    ObjectAnimator oa3=ObjectAnimator.ofFloat(imageview,"scaleY",1f,0f,1f);
                    set.playTogether(oa1,oa2,oa3);
                    set.start();


                }
                isViewSet=!isViewSet;

                break;
            case  R.id.bt_tv:
               TvAnimator tvAnimator = new TvAnimator();
                tvAnimator.setDuration(animationDuration);
                imageview.startAnimation(tvAnimator);
               break;
            case R.id.bt_3d:
                ThereDAnimator tda=new ThereDAnimator();
                tda.setDuration(animationDuration);
                imageview.startAnimation(tda);
                break;

        }
    }


}


ThereDAnimator
package com.example.liuan.animation;

import android.graphics.Camera;
import android.graphics.Matrix;
import android.view.animation.Animation;
import android.view.animation.BounceInterpolator;
import android.view.animation.Transformation;

/**
 * Name: ThereDAnimator
 * Author: liuan
 * creatTime:2017-01-05 20:04
 */

public class ThereDAnimator extends Animation {
    private int mCenterwidth;
    private int mCenterHeight;
    private Camera mCamera=new Camera();

    @Override
    public void initialize(int width, int height, int parentWidth, int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);
        //设置默认时长
        setDuration(2000);
        //结束后保留动作
        setFillAfter(true);
        //设置默认插值器
        setInterpolator(new BounceInterpolator());
        mCenterwidth=width/2;
        mCenterHeight=height/2;
    }
//动画的核心
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        super.applyTransformation(interpolatedTime, t);
        Matrix matrix = t.getMatrix();
        mCamera.save();;
        //使用camera设置旋转的角度
        float mRotateY=360;
        mCamera.rotateY(mRotateY*interpolatedTime);
        //将旋转变换作用到matrix上
        mCamera.getMatrix(matrix);
        mCamera.restore();
        //通过pre方法设置矩阵作用前的偏移量来改变旋转中心
        matrix.preTranslate(mCenterwidth,mCenterHeight);
        matrix.postTranslate(-mCenterwidth,-mCenterHeight);

    }
}

TvAnimator
package com.example.liuan.animation;

import android.graphics.Matrix;
import android.view.animation.Animation;
import android.view.animation.Transformation;

/**
 * Name: TvAnimator
 * Author: liuan
 * creatTime:2017-01-04 22:30
 */

public class TvAnimator extends Animation {
    MainActivity s=new MainActivity();


    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        super.applyTransformation(interpolatedTime, t);
        Matrix matrix = t.getMatrix();
        matrix.preScale(1,1-interpolatedTime,36,36);

    }
}

butterknife的使用 请查看我下一个的博客 
场面一度十分尴尬
今天才发现少了个帧动画 补上  首先要 在drawable 下放好图片 然后 建布局文件
如下
animation_nor.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:drawable="@drawable/wife1" android:duration="150"/>
    <item android:drawable="@drawable/wife2" android:duration="150"/>
    <item android:drawable="@drawable/wife3" android:duration="150"/>
    <item android:drawable="@drawable/wife4" android:duration="150"/>
    <item android:drawable="@drawable/wife5" android:duration="150"/>
    <item android:drawable="@drawable/wife6" android:duration="150"/>

</animation-list>


animation_res.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:drawable="@drawable/wife6" android:duration="150"/>
    <item android:drawable="@drawable/wife5" android:duration="150"/>
    <item android:drawable="@drawable/wife4" android:duration="150"/>
    <item android:drawable="@drawable/wife3" android:duration="150"/>
    <item android:drawable="@drawable/wife2" android:duration="150"/>
    <item android:drawable="@drawable/wife1" android:duration="150"/>

</animation-list>
然后添加布局Button什么的我就步多说啦 直接上核心代码
  case R.id.bt_animationlist_nor:
                imageview.setImageResource(R.drawable.animation_nor);
                animationDrawable= (AnimationDrawable) imageview.getDrawable();
                animationDrawable.start();

                break;
            case R.id.bt_animationlist_res:
                imageview.setImageResource(R.drawable.animation_res);
                animationDrawable= (AnimationDrawable) imageview.getDrawable();
                animationDrawable.start();

                break;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值