Recyclerviewスクロールによるサスペンションボタンの非表示と表示


  • 前言:
  • 最近のプロジェクトでは、複雑なリストレイアウトの表示、滝ストリームデータの表示、商品リストのリフレッシュとページングロード、リスト右下の懸濁ボタンのリストスクロールによる表示と非表示など、多くのRecyclerviewに関する知識が使われています.ここでは主に、recyclerviewがスライドするにつれて表示と非表示(すなわち、ドロップダウン非表示、上引き表示)の懸濁ボタンを記録します.一般的には2つの一般的な方法があります.
    1.FAB(FloatingActionButton)経由のlayout_behaviorプロパティは、対応する動作を設定する.2.RecyclerviewのスクロールイベントによりFAB浮上ボタンの状態を傍受変更する.
    第1の方法はネット上の資料の山で、具体的には以下の文章を参考することができます.http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0407/4126.html以下、この効果を主に第2の態様で実現する.
  • 実現構想:
  • recyclerviewのスライドイベントを傍受し、上下スライドの距離判断を設定し、FABの表示と非表示の操作を行えばよい
  • 具体的な実装:
  • scrollListenerを設定し、スライドイベントをリスニングします.
    private int distance;
    
    private boolean visible = true;
    
    ......
    
    
    xRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    super.onScrolled(recyclerView, dx, dy);
                    if(distance < -ViewConfiguration.getTouchSlop() && !visible){
                        //  fab
                        //iv_go_uploading.setVisibility(View.VISIBLE);
                        showFABAnimation(iv_go_uploading);
                        distance = 0;
                        visible = true;
                    }else if(distance > ViewConfiguration.getTouchSlop() && visible){
                        //  
                        //iv_go_uploading.setVisibility(View.GONE);
                        hideFABAnimation(iv_go_uploading);
                        distance = 0;
                        visible = false;
                    }
                    if ((dy > 0 && visible) || (dy < 0 && !visible))//                     
                        distance += dy;
                }
            });

    次に、サスペンションボタンの表示と非表示をアニメートする必要があります.
    /**
         * by moos on 2017.8.21
         * func:  fab  
         */
        public void showFABAnimation(View view)
        {
            PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("alpha", 1f);
            PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleX", 1f);
            PropertyValuesHolder pvhZ = PropertyValuesHolder.ofFloat("scaleY", 1f);
            ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY,pvhZ).setDuration(400).start();
        }
    
        /**
         * by moos on 2017.8.21
         * func:  fab   
         */
    
        public void hideFABAnimation(View view)
        {
            PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("alpha", 0f);
            PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleX", 0f);
            PropertyValuesHolder pvhZ = PropertyValuesHolder.ofFloat("scaleY", 0f);
            ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY,pvhZ).setDuration(400).start();
        }

    ここでは単純な透明度で小さな変換アニメーションを大きくすることで、その出現と隠蔽効果を実現するだけで、具体的な必要に応じて自分のアニメーション効果を設定することができます.属性アニメーションを理解していない場合は、鴻神の文章を見てみましょう.http://blog.csdn.net/lmj623565791/article/details/38067475 http://blog.csdn.net/lmj623565791/article/details/38092093
    残りのレイアウトコードは貼らないので、問題ないと信じています.
    転載前に元の文章のリンクを明記してください.ありがとうございます.個人ブログ:www.moos.club