android - RecyclerView的linearLayoutManager.findViewByPosition()问题
伊谢尔伦
伊谢尔伦 2017-04-17 17:53:34
0
0
875

看到一个博文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伐。

모든 응답(0)
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿