1

我正在制作一个聊天应用程序。我有一个扩展 LinearLayoutManager 的布局管理器,我想计算添加到适配器的视图的高度,以便当我调用 smoothScrollToPosition() 时,我可以更改滚动速度。

对于更高的高度,我会将 MILLISECONDS_PER_INCH 设置为较小的值,对于较小的高度,我会将其设置为大。

但我无法计算新添加视图的高度。

public class SmoothLinearLayoutManager extends LinearLayoutManager {

private ChatAdapter mChatAdapter;
private Context mContext;
private final float MILLISECONDS_PER_INCH = 250f;
public SmoothLinearLayoutManager(Context context,ChatAdapter adapter) {
    super(context);
    mContext = context;
    mChatAdapter = adapter;
}

public SmoothLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
    super(context, orientation, reverseLayout);
    mContext = context;
}

public SmoothLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
    mContext = context;
}

@Override
public void smoothScrollToPosition(final RecyclerView recyclerView, RecyclerView.State state, final int position) {

    Log.d("Scroll",mChatAdapter.getChildHeight()+"");

    LinearSmoothScroller smoothScroller = new LinearSmoothScroller(mContext) {
        @Override
        public PointF computeScrollVectorForPosition(int targetPosition) {
            return SmoothLinearLayoutManager.this.computeScrollVectorForPosition(position);
        }

        @Override
        protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
            return (MILLISECONDS_PER_INCH)/displayMetrics.densityDpi;
        }
    };
    smoothScroller.setTargetPosition(position);
    startSmoothScroll(smoothScroller);
}

}

4

1 回答 1

0

如果您访问新添加的视图的目的是使平滑滚动速度保持恒定,那么这个库可能对您有用。
https://github.com/nshmura/SnappySmoothScroller

像这样:

layoutManager = new SnappyLinearLayoutManager(context);
layoutManager.setSnapDuration(500);
layoutManager.setSeekDuration(1000);
于 2016-07-14T02:13:35.850 回答