android 浮動按鈕的伸縮效果


在做項目時想增加點動感,於是就有如下效果:

實現起來也很簡單,通過屬性動畫和recyclerview 滑動結合就很好實現了。

通過給recycleview添加一個滑動監聽:通過滾動的差值來處理動畫

  mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            }
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                if (dy > 0 ){
                    hidenFabAnim();
                }else{
                    showFabAnim();
                }
            }
        });

兩個動畫如下:

 /**
     * 動畫隱藏浮動按鈕
     */
    private void hidenFabAnim() {
        if (!isFabAnimg && mActionButton != null && mActionButton.getVisibility() == View.VISIBLE) {
                Animator animator = ObjectAnimator.ofFloat(mActionButton, "translationY", 0f, 100f);
                animator.setDuration(500);
                animator.addListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animation) {
                        isFabAnimg = true;
                    }
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        isFabAnimg = false;
                        mActionButton.setVisibility(View.GONE);
                    }

                    @Override
                    public void onAnimationCancel(Animator animation) {
                        isFabAnimg = false;
                    }

                    @Override
                    public void onAnimationRepeat(Animator animation) {

                    }
                });
                animator.start();
            }
    }

    /**
     * 動畫顯示浮動按鈕
     */
    private void showFabAnim(){
        if (mActionButton != null && !isFabAnimg && mActionButton.getVisibility() == View.GONE) {
            Animator animator =  ObjectAnimator.ofFloat(mActionButton,"translationY",100f,0f);
            animator.setDuration(500);
            animator.addListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animation) {
                    isFabAnimg = true;
                }

                @Override
                public void onAnimationEnd(Animator animation) {
                    isFabAnimg = false;
                }

                @Override
                public void onAnimationCancel(Animator animation) {
                    isFabAnimg = false;
                }

                @Override
                public void onAnimationRepeat(Animator animation) {

                }
            });
            mActionButton.setVisibility(View.VISIBLE);
            animator.start();
        }
    }

動畫中給定了移出屏幕和顯示在屏幕的距離是100,這個值並不是那么確定性,項目中需要通過屏幕密度來算這個值的大小,以便適應更好的滑動效果;定義了個

isFabAnimg 變量,用來明確動畫的狀態,避免了重復執行顯示或者隱藏的動畫。

可見android中要實現某些小效果還是非常的方便的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM