zoukankan      html  css  js  c++  java
  • animation of android (1)

    android把动画的模式分为:property animation,view animation,drawable animation.

    view animation:给出动画的起止状态,并且通过一定的方式来是view动起来。这个动画只能用于view。

    帧动画:是给出一组图片,有drawable来展示动画变化过程。

    1.tweened animation

     layout:

    <RelativeLayout 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=".AnimationActivity" >
    
        <ImageView
            android:id="@+id/animation_img"
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:layout_centerInParent="true"
            android:src="@drawable/icon_follower" />
    
        <LinearLayout
            android:id="@+id/action_items"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="horizontal" >
    
            <Button
                android:id="@+id/btn_alphaanimation"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:text="@string/alpha_animation" />
    
            <Button
                android:id="@+id/btn_rotateanimation"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:text="@string/rotate_animation" />
    
            <Button
                android:id="@+id/btn_scaleanimation"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:text="@string/scale_animation" />
                    <Button
                android:id="@+id/btn_translationanimation"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:text="@string/scale_animation" />
        </LinearLayout>
    
    </RelativeLayout>

    activity:

    package com.joyfulmath.animatatorsamples;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.animation.AccelerateDecelerateInterpolator;
    import android.view.animation.AlphaAnimation;
    import android.view.animation.Animation;
    import android.view.animation.Animation.AnimationListener;
    import android.view.animation.BounceInterpolator;
    import android.view.animation.LinearInterpolator;
    import android.view.animation.OvershootInterpolator;
    import android.view.animation.RotateAnimation;
    import android.view.animation.ScaleAnimation;
    import android.view.animation.TranslateAnimation;
    import android.widget.Button;
    import android.widget.ImageView;
    
    public class AnimationActivity extends Activity implements OnClickListener{
    
        private static final String TAG = "animatatorsamples";
        Button mAlphaAnimation = null;
        Button mRotateAnimation = null;
        Button mScaleAnimation = null;
        Button mTranslationAnimation = null;
        ImageView mImage = null;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_animation_main);
            mAlphaAnimation = (Button) this.findViewById(R.id.btn_alphaanimation);
            mAlphaAnimation.setOnClickListener(this);
            mRotateAnimation = (Button) this.findViewById(R.id.btn_rotateanimation);
            mRotateAnimation.setOnClickListener(this);
            
            mScaleAnimation = (Button) this.findViewById(R.id.btn_scaleanimation);
            mScaleAnimation.setOnClickListener(this);
            
            mTranslationAnimation = (Button) this.findViewById(R.id.btn_translationanimation);
            mTranslationAnimation.setOnClickListener(this);
            
            mImage = (ImageView) this.findViewById(R.id.animation_img);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.animation, menu);
            return true;
        }
    
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch(v.getId())
            {
            case R.id.btn_alphaanimation:
                startAlphaAnimation();
                break;
            case R.id.btn_rotateanimation:
                startRotateAnimation();
                break;
            case R.id.btn_scaleanimation:
                startScaleAnimation();
                break;
            case R.id.btn_translationanimation:
                startThanslationAnimation();    
                break;
            }
        }
    
        private void startRotateAnimation() {
            Log.i(TAG, "[startRotateAnimation]");
            //Animation.RELATIVE_TO_SELF the center of rotate
            Animation rotateaAni = new RotateAnimation(0f, 360f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
            rotateaAni.setDuration(3000);
            rotateaAni.setFillAfter(true);
            rotateaAni.setInterpolator(new LinearInterpolator());        
            mImage.startAnimation(rotateaAni);
            
        }
    
        private void startAlphaAnimation() {
            Log.i(TAG, "[startAlphaAnimation]");
            AlphaAnimation alphaAni = new AlphaAnimation(1.0f, 0.5f);
            alphaAni.setDuration(3000);
            alphaAni.setFillAfter(true);
            alphaAni.setInterpolator(new OvershootInterpolator());
            alphaAni.setAnimationListener(new AnimationListener() {
                
                @Override
                public void onAnimationStart(Animation arg0) {
                    // TODO Auto-generated method stub
                    Log.i(TAG, "[onAnimationStart]");
                }
                
                @Override
                public void onAnimationRepeat(Animation arg0) {
                    // TODO Auto-generated method stub
                    Log.i(TAG, "[onAnimationRepeat]");
                }
                
                @Override
                public void onAnimationEnd(Animation arg0) {
                    // TODO Auto-generated method stub
                    Log.i(TAG, "[onAnimationEnd]");
                }
            });
            
            mImage.startAnimation(alphaAni);
        }
        
        private void startScaleAnimation()
        {
            float fromX; //1.0f to 0.0f
            float toX; 
            float fromY; 
            float toY;
            int pivotXType; //where is the last place after scale
            float pivotXValue;
            int pivotYType; 
            float pivotYValue;    
            //Animation.ABSOLUTE,         //the last place with X ordinate with absolute diff 20f
            //Animation.RELATIVE_TO_SELF,   //specified dimension to self
            //Animation.RELATIVE_TO_PARENT.    //specified dimension to parent move 100%=1f with diff (%parent diff)
            ScaleAnimation scaleAnim = new ScaleAnimation(1.0f, 0.5f, 1.0f, 0.5f
    //                ,Animation.ABSOLUTE, 20f, Animation.RELATIVE_TO_PARENT,
    //                2f
                    );
            //ScaleAnimation(float fromX, float toX, float fromY, float toY) 绫讳技Animation.ABSOLUTE,涓攛,y =0;
            scaleAnim.setDuration(3000);
            scaleAnim.setFillAfter(true);
            scaleAnim.setInterpolator(new OvershootInterpolator());
            mImage.startAnimation(scaleAnim);
            
        }
        
        private void startThanslationAnimation()
        {
            Log.i(TAG, "[startThanslationAnimation]");
            //Animation.ABSOLUTE where is the last point show place
            //the start x,y ordinate is the current place with translation 
            TranslateAnimation anmit= new TranslateAnimation(Animation.RELATIVE_TO_PARENT,0.1f,Animation.RELATIVE_TO_PARENT,0.5f,
                    Animation.RELATIVE_TO_PARENT,0.2f,Animation.RELATIVE_TO_PARENT, 0.6f);
            anmit.setDuration(3000);
            anmit.setFillAfter(true);
            anmit.setInterpolator(new BounceInterpolator());
            mImage.startAnimation(anmit);    
        }
        
    }

    animation 是一种变换动画,也就是实际的响应位置和大小并没有变化,只是视图上的变换。

    这种动画变换成本低,效率高。

    这些类都继承自android.view.animation.Animation

     2.animationset

    view视图动画组合只用是一个view对象的多种状态变换。

        /**
         * Constructor to use when building an AnimationSet from code
         * 
         * @param shareInterpolator Pass true if all of the animations in this set
         *        should use the interpolator associated with this AnimationSet.
         *        Pass false if each animation should use its own interpolator.
         */
        public AnimationSet(boolean shareInterpolator) {
            setFlag(PROPERTY_SHARE_INTERPOLATOR_MASK, shareInterpolator);
            init();
        }

    如androidsdk源码所示,shareInterpolator将决定使用每个animation的interpolator

    还是animationset的变换方式。

    animationset的变换只能一起播放,只有通过startoffset的方式可以模拟变换的顺序。

    3.android.view.animation.BaseInterpolator

    变换方式:

    末前支持的是:

    AccelerateDecelerateInterpolator,  开始和结束变换慢,中间变换快速

    AccelerateInterpolator,          开始缓慢,然后加速

    AnticipateInterpolator,        变换会有一个回调,也就是先向后变换,然后按照给定关键帧的方式变换。   

    AnticipateOvershootInterpolator,      An interpolator where the change starts backward then flings forward and overshoots the target value and finally goes back to the final value

    BounceInterpolator,         贝叶斯曲线

    CycleInterpolator,          sin曲线

    DecelerateInterpolator,        减速变化

    LinearInterpolator,          默认,线性变换

    OvershootInterpolator,        An interpolator where the change flings forward and overshoots the last value then comes back.

    PathInterpolator          5.1新功能。可以自定义变换路径方式。         

  • 相关阅读:
    ssh.sh_for_ubuntu1604
    ssh.sh_for_ubuntu1404
    ssh.sh_for_ubuntu1204
    ssh.sh_for_centos
    raw,cow,qcow,qcow2镜像的比较
    Oz 创建Windows2008R2镜像
    Oz 创建Ubuntu镜像
    Oz 创建Debian8镜像
    Oz 创建CentOS7镜像
    Oz 创建CentOS6镜像
  • 原文地址:https://www.cnblogs.com/deman/p/4357455.html
Copyright © 2011-2022 走看看