Ich habe eine RecyclerView mit Expandable untergeordneten Ansichten, wenn die untergeordnete ViewGroup angeklickt wird, bläht eine Anzahl von Ansichten die ViewGroup-Höhe von 0 auf die gemessene Höhe der Viewgroup animiert, wie das folgende gif :Android RecyclerView glatter Bildlauf, um anzuzeigen, dass ihre Höhe animiert
Das Problem ist: ich i‘smoothScrollToPosition auf recyclerView, es glatt blättern zu der Ansicht Stellung, aber es hält die aktuelle Ansicht Höhe, die noch nicht erweitert ist, in dem oben gif bin Aufruf Ich berühre die Unteransicht der Recycleransicht, die nicht zur Position scrollt, da die Ansicht bereits sichtbar ist, aber wenn ich sie wieder anfasse (Aufruf der glatten scrolltoposition wieder) es scrollen die Ansicht auf die richtige Position, weil die Ansicht bereits erweitert ist.
Gibt es einen Ansatz, um die Ansicht an den oberen Bildschirmrand zu scrollen oder nur zu scrollen, um den Inhalt sichtbar zu machen?
Für Referenzen: Dies ist die Methode aufgerufen, um die Ansichten aufzublasen:
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);
}
Und das ist meine Methode zu erweitern:
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;
}
Und die Animation:
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;
}
}
Ich tat dies, aber ich möchte blättern, während die Ansicht animiert, war mein Ansatz eine Animation Zuhörer hinzufügen zu überprüfen, ob der Boden Y der Blick aus dem RecyclerView ist, dann Rufen Sie smoothscrollby auf, geben Sie den Wert der Pixel aus, aber ich schaffte es nicht, wie das geht –
Okay, also Sie wollen Bith Animationen parallel – Mann
Ich denke, Sie müssen die Höhe der Ansicht "vortäuschen" eine höhere Ansicht vorgeben – Mann