У меня есть RecyclerView с расширяемыми детскими представлениями, когда щелкнули дочернюю группу ViewGroup, она раздувает количество просмотров, оживляющих высоту ViewGroup от 0 до измеренной высоты группы просмотра, например, следующий gif :Android RecyclerView гладкая прокрутка для просмотра, что оживляет их высоту
проблема: Я звоню smoothScrollToPosition на recyclerView, она гладкая прокрутки позиции просмотра, но он считает текущую высоту вида, который до сих пор не расширен, в приведенном выше GIF я» m, касаясь просмотра под видом recyclerview, которые не прокручиваются до позиции, потому что представление уже видно, но когда я касаюсь снова (называя гладкое scrolltoposition снова), он прокручивает представление до правильной позиции, потому что представление уже расширено.
Есть ли способ прокрутить представление до верхней части экрана или просто прокрутить, чтобы сделать контент видимым?
Для справки: Этот метод называется надуть просмотров:
collapsible_content.removeAllViews();
for(int i = 0; i < 5; i++) {
View link_view = getLayoutInflater().inflate(R.layout.list_item_timeline_step_link, collapsible_content, false);
TextView text = (TextView) link_view.findViewById(R.id.step_link_text);
text.setText("Test");
collapsible_content.addView(link_view);
}
И это мой метод расширения:
public void toggle() {
collapsible_content.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
Animation a;
if (mExpanded) {
a = new ExpandAnimation(collapsible_content.getLayoutParams().height, 0);
} else {
a = new ExpandAnimation(collapsible_content.getLayoutParams().height, getMeasuredHeight());
}
a.setDuration(mAnimationDuration);
collapsible_content.startAnimation(a);
mExpanded = !mExpanded;
}
и анимация:
private class ExpandAnimation extends Animation {
private final int mStartHeight;
private final int mDeltaHeight;
public ExpandAnimation(int startHeight, int endHeight) {
mStartHeight = startHeight;
mDeltaHeight = endHeight - startHeight;
}
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t) {
final int newHeight = (int) (mStartHeight + mDeltaHeight *
interpolatedTime);
collapsible_content getLayoutParams().height = newHeight;
if (newHeight <= 0) {
collapsible_content setVisibility(View.GONE);
} else {
collapsible_content setVisibility(View.VISIBLE);
}
collapsible_content requestLayout();
}
@Override
public boolean willChangeBounds() {
return true;
}
}
Я сделал это, но я хочу, чтобы прокрутить в то время как точка зрения анимации, мой подход был добавить анимацию слушателя, чтобы проверить, если дно Y из зрения из RecyclerView, то call smoothscrollby, давая значение пикселей, но я did not управляю как к этому –
Хорошо, так что вы хотите анимацию бита parallly – Mann
Я думаю, вам нужно «подделать» высоту представления, чтобы притворяться более высокого вида – Mann