У меня есть проблема о теме, и теперь моя ситуация у меня есть ViewPager внутри Scrollview и они внутри emilsjolander FlipView, структура выглядит следующим образом:Android FlipView сделать ViewPager красть первый элемент без анимации
<FlipView>
<ScrollView>
<ViewPager>
</ViewPager>
</ScrollView>
</FlipView>
и потому, что некоторые проблемы с viewpager не могут обнаружить прикосновение, поэтому я просто реализую пользовательский Viewpager.
после того, как я внедрил пользовательский Viewpager, проблема касания исправлена, но у viewpager есть проблема с анимацией.
, когда я прокручиваю viewpager, иногда он работает идеально, но иногда viewpager просто меняет элемент без анимации, и кажется, что первое изменение элемента в Sec Item должно вызвать этот случай. Поэтому я просто поместил некоторый журнал в метод startScroll класса ScrollerCustomDuration, и я обнаружил, что, когда переменная viewpager изменяется без анимации, метод startScroll для ScrollerCustomDuration не является вызовом.
Прошу прощения за мой бедный английский и благодарю вас за помощь, пожалуйста, дайте мне знать, если мне нужно предоставить более подробную информацию по этой проблеме.
CustomViewPager Класс:
public class CustomViewPager extends ViewPager {
private ScrollerCustomDuration mScroller = null;
public CustomViewPager(Context context) {
super(context);
postInitViewPager();
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
postInitViewPager();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
Log.e("onInterceptTouchEvent",event.toString());
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
this.getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
this.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return super.onInterceptTouchEvent(event);
}
private void postInitViewPager() {
try {
Class<?> viewpager = ViewPager.class;
Field scroller = viewpager.getDeclaredField("mScroller");
scroller.setAccessible(true);
Field interpolator = viewpager.getDeclaredField("sInterpolator");
interpolator.setAccessible(true);
mScroller = new ScrollerCustomDuration(getContext(),
(Interpolator) interpolator.get(null));
scroller.set(this, mScroller);
} catch (Exception e) {
Log.e("MyPager", e.getMessage());
}
}
public void setScrollDurationFactor(double scrollFactor) {
mScroller.setScrollDurationFactor(scrollFactor);
}}
ScrollerCustomDuration Класс:
public class ScrollerCustomDuration extends Scroller {
private double mScrollFactor = 1;
public ScrollerCustomDuration(Context context) {
super(context);
}
public ScrollerCustomDuration(Context context, Interpolator interpolator) {
super(context, interpolator);
}
@SuppressLint("NewApi")
public ScrollerCustomDuration(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
}
/**
* Set the factor by which the duration will change
*/
public void setScrollDurationFactor(double scrollFactor) {
mScrollFactor = scrollFactor;
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
Log.e("##### FIX flash issue",""+startX);
Log.e("##### FIX flash issue",""+startY);
Log.e("##### FIX flash issue",""+dx);
Log.e("##### FIX flash issue",""+dy);
Log.e("##### FIX flash issue",""+duration);
super.startScroll(startX, startY, dx, dy, (int) (duration * mScrollFactor));
}
}