Recyclerviewスクロールによるサスペンションボタンの非表示と表示
4775 ワード
1.FAB(FloatingActionButton)経由のlayout_behaviorプロパティは、対応する動作を設定する.2.RecyclerviewのスクロールイベントによりFAB浮上ボタンの状態を傍受変更する.
第1の方法はネット上の資料の山で、具体的には以下の文章を参考することができます.http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0407/4126.html以下、この効果を主に第2の態様で実現する.
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