Я делаю чат-приложение. У меня есть менеджер макетов, который расширяет LinearLayoutManager, и я хочу вычислить высоту представления, добавленного к адаптеру, чтобы при вызове smoothScrollToPosition() я мог изменить скорость прокрутки.Как получить доступ к недавно добавленному представлению от администратора linearlayout
Для большей высоты я сделаю 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);
}
}
Это будет иметь постоянную скорость для всех, недавно добавленный не видно изначально, потому что он находится в нижней части, и я должен перейти к этой позиции, теперь, так как это не видно, это не в onBindView, поэтому мой вопрос состоял в том, можно ли измерить высоту недавно добавленного представления, которое не видно? – Ezio
Высота вновь добавленного вида определяется в методе View # onMeasure. View # метод onMeasure вызывается после вызова метода RecyclerView.Adapter # onBindView. Так что я думаю, что нет способа измерить высоту представления перед вызовом метода RecyclerView.Adapter # onBindView. – nshmura