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

来源:互联网 发布:js函数call传参数 编辑:程序博客网 时间:2024/05/18 02:56

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

布局
<?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;




0 0
原创粉丝点击