У меня есть ViewPager
, который имеет 5 страниц.И у меня есть другой TextView tvInstruction
, который находится ниже ViewPager, и он получает тексты из массива на основе ViewPager position
.
Мне удалось достичь этого до сих пор: для анимации альфа-свойства этого TextView на основе positionOffset
ViewPager.Таким образом, когда страница появляется справа (при пролистывании влево), свойство tvInstruction
alpha постепенно уменьшается, и когда две страницы ViewPager одинаково видны на экране, свойство альфа tvInstruction
становится 0f
.И затем он снова получает альфа, перемещаясь к 1f, когда проведите пальцем.
Чего я хочу достичь : в середине пролистывания, когда альфа-свойство TextView становится 0f
Я хочу, чтобы tvInstruction
получил другое String
из mInstructions
массив на основе свайпа.И это должно работать, даже когда я пролистываю почти до следующей страницы, но не убирая палец, возвращаясь к текущей странице -> tvInstruction
должен изменить свой текст на другой текст из массива, а затем при возвращении на текущую страницу. Он должен измениться натекст текущей страницы.
Что я заметил, так это то, что аргумент position
метода onPageScrolled()
увеличивается / уменьшается, когда пролистывание complete не в середине.Это проблема, которую я прошу вас помочь мне решить.
Это из моей основной деятельности:
private float alphaVal;
private int mPageNumber;
private mInstructions[] = {"A", "B", "C", "D", "E"};
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// "diff" to determine the swipe
float diff = positionOffset - mLastPositionOffset;
// "alphaVal" based on the positionOffset
alphaVal = (1f - positionOffset * 2);
if (diff > 0) {
System.out.println("swipe left");
tvInstruction.setAlpha(Math.abs(alphaVal));
// This is where the magic happens
if (alphaVal < 0 && mPageNumber == position) {
tvInstruction.setText(mInstructions[mPageNumber + 1]);
mPageNumber++;
}
} else {
System.out.println("swipe right");
tvInstruction.setAlpha(Math.abs(alphaVal));
// This is where the magic happens
if (alphaVal > 0 && mPageNumber == position) {
tvInstruction.setText(mInstructions[mPageNumber - 1]);
mPageNumber--;
}
}
mLastPositionOffset = positionOffset;
}
Если в вопросах есть какое-то двусмысленное место, не стесняйтесь просить разъяснений.