0

У меня есть проблема о теме, и теперь моя ситуация у меня есть 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)); 
} 

} 

ответ

0

я просто исправил проблему. Кажется, проблема не в ontouch. я просто обновить FlipView когда FlipView флип

код ниже фиксированной моя проблема

fv.setOnFlipListener(new FlipView.OnFlipListener() { 
     @Override 
     public void onFlippedToPage(FlipView v, int position, long id) { 

      ((BaseAdapter)fv.getAdapter()).notifyDataSetChanged(); 
     } 
    });