看到一个博文Android轻松实现RecyclerView悬浮条
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {//滚动时回调(过程) dx: 水平滚动距离 dy:垂直滚动距离
super.onScrolled(recyclerView, dx, dy);
//dy > 0 时为手指向上滚动,列表滚动显示下面的内容
//dy < 0 时为手指向下滚动,列表滚动显示上面的内容
Log.e(TAG, "onScrolled: " + dx + "\\" + dy );
View view = linearLayoutManager.findViewByPosition(mCurrentPosition + 1);
//View.getY()获取到的值为 相对于父视图而言的上边缘的距离 ==》getTop + getTranslationY
//view.getX 相当于 view距离父容器左边缘的距离 ==》 getleft+getTranslationX(view的偏移量)
if (view != null) {
if (view.getTop() <= mSuspensionHeight) { //view得到的高 小于等于 获取 155
mSuspensionBar.setY(-(mSuspensionHeight - view.getTop())); // 给Bar设置高度 ( - 155-(很大的正数) ) 取相反数 是因为 y轴正方向向下
} else {
mSuspensionBar.setY(0);//setY ==> setTranslation(y-getTop) setTranslationY 在竖直方向上将该控件从它本来的位置偏移i个像素
}
}
//悬浮条显示的信息是来自第一个可见View的,而其下方的View正是第二个列表项,我们可以获取到它的top值。
//mCurrentPosition为悬浮条信息来自的那个列表项在RecyclerView的位置
if (mCurrentPosition != linearLayoutManager.findFirstVisibleItemPosition()) {//返回第一个可见视图的适配器位置
//linearLayoutManager.findFirstCompletelyVisibleItemPosition()//返回第一个完全可见视图的适配器位置
mCurrentPosition = linearLayoutManager.findFirstVisibleItemPosition();
mSuspensionBar.setY(0);
updateSuspensionBar();
}
}
});
// updateSuspensionBar();
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v7.widget.RecyclerView
android:id="@+id/feed_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:scrollbars="vertical" />
<RelativeLayout
android:id="@+id/suspension_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white">
<com.xiaopo.flying.suspensionbar.CircleImageView
android:id="@+id/iv_avatar"
android:layout_width="44dp"
android:layout_height="44dp"
android:padding="8dp"
android:src="@drawable/avatar1" />
<TextView
android:id="@+id/tv_nickname"
android:layout_width="wrap_content"
android:layout_height="44dp"
android:layout_marginLeft="8dp"
android:layout_toRightOf="@id/iv_avatar"
android:gravity="center_vertical"
android:text="@string/snowbean"
android:textSize="12sp" />
<View
android:id="@+id/top_pider"
android:layout_width="match_parent"
android:layout_height="10dp"
android:layout_below="@id/tv_nickname"
android:background="#33000000" />
</RelativeLayout>
</FrameLayout>
以上为局部代码
问题1:linearLayoutManager.findViewByPosition(mCurrentPosition + 1) 得到的View 是 recyclerview中的重复很多遍的那个item吗
问题2: 为什么向上滑动时 dy的值是一位数(这一位数 是什么鬼啊)
问题3:向上滑动时 getTop 和getX 值是相同的 但是 getX= getTranslationX+getTop啊 为什么getTranslationX一直是0呢
小伙看你根骨奇佳,潜力无限,来学PHP伐。