Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android屬性動畫之實現布局的下拉展開

Android屬性動畫之實現布局的下拉展開

編輯:Android開發教程

前段時間,我們做了一下Android的幾個動畫(http://blog.csdn.net/qq_25193681/article/details/51777248),對Android的補間動畫有了一定的了解。但是在Android的3.0之後,google又提出了屬性動畫的這樣一個框架,他可以更好的幫助我們實現更豐富的動畫效果。所以為了跟上技術的步伐,今天就聊一聊屬性動畫。

這一次的需求是這樣的:當點擊一個View的時候,顯示下面隱藏的一個View,要實現這個功能,需要將V iew的visibility屬性設置gone為visible即可,但是這個過程是一瞬間的,並不能實現我們要的效果。所以,屬性動畫是個不錯的方案。

先把效果貼上 

第一個:

 

第二個:

 

前面的這個是隱藏著,後面這個是顯示的。當點擊這個箭頭的時候,來切換顯示或者隱藏,

現在開始編碼:

布局文件如下

 =
    =
    =
    =
    =
    = >

            =
        =
        =
        = >

                    =
            =
            =
            =
            =
            =
            = />
    >

            =
        =
        =
        =
        = >

                    =
            =
            =
            =
            =
            = />

                    =
            =
            =
            =
            = />
    >

            =
        =
        =
        =
        =
        = >

                    =
            =
            =
            =
            =
            = />

                    =
            =
            =
            =
            = />
    >

            =
        =
        =
        =
        =
        = >

                    =
            =
            =
            =
            = />
    >

>

這裡面代碼並不多,也很簡單,三個線性布局,裡面裝載著各自的控件,並且還設置了ID。按鈕是一個線性布局,采用了onClick自身的點擊事件。接下來,當點擊了這個線性布局的時候,需要隱藏的控件最終到達一個高度,這個就是我們的目標值,只需要通過布局中的dp轉換成像素就行了。


 + );

這裡是120就是我們布局裡面定義的高度。

然後給這個過程增加一個動畫效果。

    ValueAnimator animator = ValueAnimator.ofInt(start, end);
        animator.addUpdateListener( AnimatorUpdateListener() {

            @Override
              (ValueAnimator arg0) {
                  = () arg0.getAnimatedValue();
                ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
                layoutParams.height = ;
                v.setLayoutParams(layoutParams);

            }
        });

通過這樣一個簡單的ValueAnimator ,就可以很方便的實現顯示和隱藏的動畫效果了。 

下面是完整的代碼。

 android.animation.Animator;
 android.animation.AnimatorListenerAdapter;
 android.animation.ValueAnimator;
 android.animation.ValueAnimator.AnimatorUpdateListener;
 android.os.Bundle;
 android.support.v7.app.ActionBarActivity;
 android.view.View;
 android.view.ViewGroup;
 android.view.Window;
 android.view.animation.Animation;
 android.view.animation.RotateAnimation;
 android.widget.ImageView;
 android.widget.LinearLayout;

     {
     LinearLayout mHiddenLayout;

      mDensity;

      mHiddenViewMeasuredHeight;

     ImageView mIv;

    
      (Bundle savedInstanceState) {
        .onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        //URL:http://www.bianceng.cn/OS/extra/201608/50381.htm
        mHiddenLayout = (LinearLayout) findViewById(R.id.linear_hidden);
        mIv = (ImageView) findViewById(R.id.my_iv);

        mDensity = getResources().getDisplayMetrics().density;

        mHiddenViewMeasuredHeight = () (mDensity *  + );

    }

      (View v) {
         (mHiddenLayout.getVisibility() == View.GONE) {
            animateOpen(mHiddenLayout);
            animationIvOpen();
        }  {
            animateClose(mHiddenLayout);
            animationIvClose();
        }
    }

      (View v) {
        v.setVisibility(View.VISIBLE);
        ValueAnimator animator = createDropAnimator(v, ,
                mHiddenViewMeasuredHeight);
        animator.start();

    }

      () {
        RotateAnimation animation =  RotateAnimation(, ,
                Animation.RELATIVE_TO_SELF, f, Animation.RELATIVE_TO_SELF,
                f);
        animation.setFillAfter();
        animation.setDuration();
        mIv.startAnimation(animation);
    }

      () {
        RotateAnimation animation =  RotateAnimation(, ,
                Animation.RELATIVE_TO_SELF, f, Animation.RELATIVE_TO_SELF,
                f);
        animation.setFillAfter();
        animation.setDuration();
        mIv.startAnimation(animation);
    }

      ( View view) {
         origHeight = view.getHeight();
        ValueAnimator animator = createDropAnimator(view, origHeight, );
        animator.addListener( AnimatorListenerAdapter() {
            
              (Animator animation) {
                view.setVisibility(View.GONE);
            }

        });
        animator.start();
    }

     ValueAnimator ( View v,  start,  end) {
        ValueAnimator animator = ValueAnimator.ofInt(start, end);
        animator.addUpdateListener( AnimatorUpdateListener() {

            
              (ValueAnimator arg0) {
                 value = () arg0.getAnimatedValue();
                ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
                layoutParams.height = value;
                v.setLayoutParams(layoutParams);

            }
        });
         animator;
    }

}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved