私は150dpのmarginTopで始まるrecyclerViewを持っています。 recyclerViewを上にスクロールすると、marginTopが0に達するまで減らされ、画面全体が占有され、逆にスクロールして150dp marginTopに戻るようにします。RecyclerView - プログラムで変更する代わりにマージンを変更するアニメーション
現在、私は次のよう
final RecyclerView v = (RecyclerView) findViewById(R.id.recycler_view);
//calculate px given the 150dp
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
final int px = (int)((150 * displayMetrics.density) + 0.5);
v.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy){
offset += dy;
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
lp.setMargins(0, px - offset, 0, 0);
v.setLayoutParams(lp);
}
});
でこれを実現していますこれは正常に動作しますが、しばしばそれは非常に滑らかではなく、非常に「ギザギザ」感じています。この関数を実装するためのより良い、よりスムーズな方法がありますか?おそらく、いくつかのタイプのアニメーションがありますか?
EDIT:一部の人には解決策を提示しましたが、正確には探していません。フォローアップの質問のコメントをご覧ください。
http://stackoverflow.com/questions/40167073/recyclerview-itemdecoration-blocks-touch-access-to-viewpager-behind-it – user3277633