我现在做一个在Fragment里面将RecyclerView滑动后,本身做一个调整后,再调用或者触发整个屏幕的一个监听事件,但是,我实现的时候呢,却不起作用。
先是直接调用在RecyclerView中,后,又试了下,在onViewCreated中先初始化一下,但是,还是不行呢?
下面是Fragment里面的RecyclerView滚动监听的一些写法
private void initRecyclerSlide() {
RecyclerView.LayoutManager layoutManager = mRecyclerView.getLayoutManager();
/*
* 判断是当前layoutManager是否为LinearLayoutManager
* 只有LinearLayoutManager才有查找第一个和最后一个可见view位置的方法
* */
if (layoutManager instanceof LinearLayoutManager) {
LinearLayoutManager linearManager = (LinearLayoutManager) layoutManager;
//获取最后一个可见view的位置
int lastItemPosition = linearManager.findLastVisibleItemPosition();
if (lastItemPosition == 0) {
// setMarginTop(tuyuBigPage.getHeight() + tuyuMiddlePage.getHeight() );//下拉时,大图加小图,因为减过
// tuyuBigPage.setVisibility(View.VISIBLE);
}
//获取第一个可见view的位置
int firstItemPosition = linearManager.findFirstVisibleItemPosition();
if (firstItemPosition == 0) {
// tuyuBigPage.setVisibility(View.INVISIBLE);
// setMarginTop(tuyuBigPage.getHeight() - tuyuMiddlePage.getHeight());//上滑时 大头部 减 要隐藏的头部
}
}
//RecyclerView 上推 隐藏
//RecyclerView 上推 隐藏
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
initListener();
if (dy < 0) {
tuyuBigPage.setVisibility(View.VISIBLE);
setMarginTop(tuyuBigPage.getHeight() + tuyuMiddlePage.getHeight());//下拉时,大图加小图,因为减过
} else if (dy > 0) {
tuyuBigPage.setVisibility(View.INVISIBLE);
setMarginTop(tuyuBigPage.getHeight() - tuyuMiddlePage.getHeight());//上滑时 大头部 减 要隐藏的头部
}
// RecyclerViewUtils.getInstance().reCircleMenu.bringToFront();
// reCircleMenu.bringToFront();
}
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
// tuyuBigPage.setVisibility(View.INVISIBLE);
} else if (newState == RecyclerView.SCROLL_STATE_IDLE) {
// tuyuBigPage.setVisibility(View.VISIBLE);
}
}
});
}
下面是Fragment里面整个屏幕的一个方法
//触碰监听
public void initListener() {
//触碰监听
TuyuFragment.this.myOnTouchListener = new MyOnTouchListener() {
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {//就是这个 dispatchTouchEvent 没有在Fragment里面重写
return dispathTouchEvent(ev);
}
};
registerMyOnTouchListener(myOnTouchListener);
}
//---------------------------------设置隐藏头部
private boolean dispathTouchEvent(MotionEvent event) {
if (mIsAnim) {
return false;
}
final int action = event.getAction(); //得到移动
float x = event.getX(); //移动横轴
float y = event.getY(); //移动竖轴
switch (action) {
case MotionEvent.ACTION_DOWN:
lastY = y;
lastX = x;
return false;
case MotionEvent.ACTION_MOVE:
float dY = Math.abs(y - lastY); //当前竖移动点 减 0值
float dX = Math.abs(x - lastX); //当前横移动点 减 0值
boolean down = y > lastY ? true : false; //当前竖移动点 > 0值
lastY = y;
lastX = x;
isUp = dX < 8 && dY > 8 && !mIsTitleHide && !down; //手指Up状态:如果横不小于8 竖不大于8, 隐藏为真或不是down时
isDown = dX < 8 && dY > 8 && mIsTitleHide && down; //手指Down状态:如果横不小于8 竖不大于8, 隐藏为假或是down时
if (isUp) {
View view = this.tuyuBigPage;
float[] f = new float[2];
f[0] = 0.0F;
f[1] = -tuyuMiddlePage.getHeight();//获取要隐藏的 高度
ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "translationY", f);
animator1.setInterpolator(new AccelerateDecelerateInterpolator());
animator1.setDuration(500);//设置动画时间
animator1.start();
animator1.addListener(this);
tuyuPlayBar000.setVisibility(View.INVISIBLE);
setMarginTop(tuyuBigPage.getHeight() - tuyuMiddlePage.getHeight());//大头部 减 要隐藏的头部
} else if (isDown) {
View view = this.tuyuBigPage;
float[] f = new float[2];
f[0] = -tuyuMiddlePage.getHeight();
f[1] = 0F;
ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "translationY", f);
animator1.setDuration(300);
animator1.setInterpolator(new AccelerateDecelerateInterpolator());
animator1.start();
animator1.addListener(this);
} else {
return false;
}
mIsTitleHide = !mIsTitleHide;
mIsAnim = true;
break;
default:
return false;
}
return false;
}
这个屏幕监听事件在单独使用时,能够生效,就是在RecyclerView实现后,再调用它,却不成功。
因为,我想做一个将Recycler下滑动时,隐藏一些头部,让Recycler上浮,再下拉时,再将头部下拉致原来的位置。。