Sie haben sichtbar zu halten, nicht nur das ausgewählte Element aber auch das auf e, das zuvor ausgewählt wurde, wenn die Folie von einem zum anderen animiert werden soll. Nach dem Aufruf setCurrentItem(selectedItem,true)
, alle Aufrufe an viewPager.getCurrentItem()
innerhalb transformPage
gibt den gleichen Wert zurück, den Sie zuvor festgelegt haben, es ist nicht, dass es durch Smooth Scroll geändert wird. Ich denke, man kann mit transformPage es auf diese Weise tun:
int prevSelFrag = 0, currentSelFrag = 0; //member variables
@Override
protected void onCreate(Bundle savedInstanceState) {
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int pos) {
prevSelFrag = currentSelFrag;
currentSelFrag = pos;
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
pager.setPageTransformer(false, new PageTransformer() {
@Override
public void transformPage(View page, float relativePosition) {
float transDiff = prevSelFrag - currentSelFrag;
if (transDiff > 1.0f || transDiff < -1.0f) {
boolean transIsToRight = transDiff < 0.0f;
if (transIsToRight && relativePosition < -1) {
page.setVisibility(View.GONE);
} else if (relativePosition > 1) { //trans is to left
page.setVisibility(View.GONE);
}else{
page.setVisibility(View.VISIBLE);
}
}else{
page.setVisibility(View.VISIBLE);
}
}
});
}
relative ist die Seite Position relativ zur Seite auf setCurrentItem gesetzt, so dass die gegebenen View page
in der Animation zu dieser Position gehen (aber nicht in Echt Pagerzustand). Wenn Sie zum Beispiel auf der Seite 0 und ruft setCurrentItem(2,true)
in transformPage können Sie erhalten:
- aktuelle Ansicht auf Seite 1 mit relativem = -2
- aktueller Ansicht in Seite 0 mit relativem = -1
- Strom Ansicht auf Seite 2 mit relativerPosition = 0
Natürlich variieren diese Werte zwischen ihnen, um den Übergangseffekt zu machen. ViewPager smoothScroll hat nicht für mich funktioniert, musste diese Lösung verwenden, um das zu beheben ->https://stackoverflow.com/a/14776244/4282954
Verwenden Sie einen benutzerdefinierten 'ViewPagerAdapter'? – Droidekas