Android 滚动停止时的回收器视图
基本上,我希望我的recyclerview自动滚动到项目未显示一半的位置。就像谷歌游戏里的那个 我已经写了一个代码Android 滚动停止时的回收器视图,android,android-recyclerview,Android,Android Recyclerview,基本上,我希望我的recyclerview自动滚动到项目未显示一半的位置。就像谷歌游戏里的那个 我已经写了一个代码 public void scrollToVisible(){ int firstVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition(); View view = recyclerView.getLayout
public void scrollToVisible(){
int firstVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
View view = recyclerView.getLayoutManager().getChildAt(0);
if (firstVisibleItemPosition > 0 && view != null) {
int offsetTop = view.getTop();
if (firstVisibleItemPosition - 1 >= 0 && adapter.getItemCount() > 0) {
((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(firstVisibleItemPosition - 1, offsetTop);
}
}
}
接下来是问题。我不知道该把代码放在哪里。我有一个模糊的想法,把它当循环视图停止滚动,但我已经搜索了很长一段时间了,我找不到这样的方法。当我把它放在onScroll上时,出现了一些意想不到的行为您可以创建一个CustomRecyclerView扩展RecyclerView
public class CustomRecyclerView extends RecyclerView {
@Override
public void onScrollStateChanged(int state) {
super.onScrollStateChanged(state);
// check if scrolling has stopped
if (state == SCROLL_STATE_IDLE) {
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) getLayoutManager();
// use code here
}
}
您可以创建CustomRecyclerView扩展RecyclerView
public class CustomRecyclerView extends RecyclerView {
@Override
public void onScrollStateChanged(int state) {
super.onScrollStateChanged(state);
// check if scrolling has stopped
if (state == SCROLL_STATE_IDLE) {
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) getLayoutManager();
// use code here
}
}
如果对某人有帮助:
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
Log.d("y value",String.valueOf(dy));
if (dy > 0) {
//scrolling up
} else {
// Scrolling down
}
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
// Do something
Log.e("SCROLL_STATE_FLING","SCROLL_STATE_FLING");
} else if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
Log.e("SCROLLTOUCH_SCROLL","SCROLL_STATE_TOUCH_SCROLL");
//slideUp(party_view);
// Do something
} else if (newState==AbsListView.OnScrollListener.SCROLL_STATE_IDLE){
// Do something
//slideDown(party_view);
Log.e("SCROLL_STATE_IDLE","SCROLL_STATE_IDLE");
}
}
});
如果对某人有帮助:
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
Log.d("y value",String.valueOf(dy));
if (dy > 0) {
//scrolling up
} else {
// Scrolling down
}
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
// Do something
Log.e("SCROLL_STATE_FLING","SCROLL_STATE_FLING");
} else if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
Log.e("SCROLLTOUCH_SCROLL","SCROLL_STATE_TOUCH_SCROLL");
//slideUp(party_view);
// Do something
} else if (newState==AbsListView.OnScrollListener.SCROLL_STATE_IDLE){
// Do something
//slideDown(party_view);
Log.e("SCROLL_STATE_IDLE","SCROLL_STATE_IDLE");
}
}
});
这在我使用CustomRecycleView android.view.InflateException:Binary XML文件行#8:Error Expling class gaming.kg.passingvehiclecounter.CustomRecycleWebOk时显示出来,我终于成功了,谢谢。现在唯一的问题是平滑滚动,但这是一个不同的问题,所以我会将你的答案标记为正确。这在我使用customrecyclerview android.view.InflateException:Binary XML文件行时显示出来。8:错误膨胀class gaming.kg.passingvehiclecounter.CustomRecyclerService我终于成功了,谢谢。现在唯一的问题是平滑滚动,但这是一个不同的问题,所以我会将你的答案标记为正确