animation of android (1),animationandroid

來源:互聯網
上載者:User

animation of android (1),animationandroid

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新功能。可以自訂變換路徑方式。         

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.