2011-01-14 2 views
1

Как сделать управление галереей для прокрутки одного изображения за раз? И что является хорошим способом создания непрерывной петли этих изображений? Я попробовал переопределить onFling, не работает вообще.Галерея прокручивает одно изображение за один раз

Это перемещает изображение на определенное расстояние, но на самом деле не реализует «истинный пейджинг».

@Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 

      // return super.onFling(e1, e2, velocityX, velocityY); 
      int kEvent; 
       if(isScrollingLeft(e1, e2)){ //Check if scrolling left 
       kEvent = KeyEvent.KEYCODE_DPAD_LEFT; 
       } 
       else{ //Otherwise scrolling right 
       kEvent = KeyEvent.KEYCODE_DPAD_RIGHT; 
       } 
       onKeyDown(kEvent, null); 
       return true; 
     } 
     private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2){ 
       return e2.getX() > e1.getX(); 
      } 

ответ

9

Я создал новый элемент управления под названием CustomGallery и расширил его из галереи. В пользовательской галерее я разместил следующее:

@Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     return super.onFling(e1, e2, 0, velocityY); 
     } 

В моей деятельности я использую CustomGallery вместо Gallery. Это работает. Одно дело, мы переместились от 2,2 до 2,3 (пряники). Это не сработало для меня раньше, когда я пытался переопределить onFling. Поэтому я подозреваю, что это также имеет отношение к версии ОС.

+2

Вам не кажется, что если вы получите 333 просмотров, это примерно то время, когда google начинает работать над более простым решением здесь? :) – dropsOfJupiter

3

Это работает все время. на всех версиях обязательно для меня.

private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) { 
    return e2.getX() < e1.getX(); 
} 

private boolean isScrollingRight(MotionEvent e1, MotionEvent e2) { 
    return e2.getX() > e1.getX(); 
} 

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
     float velocityY) { 
    boolean leftScroll = isScrollingLeft(e1, e2); 
    boolean rightScroll = isScrollingRight(e1, e2); 

    if (rightScroll) { 
     if (getSelectedItemPosition() != 0)    
      setSelection(getSelectedItemPosition() - 1, true); 
    } else if (leftScroll) { 

     if (getSelectedItemPosition() != getCount() - 1) 
      setSelection(getSelectedItemPosition() + 1, true); 
    } 
    return true; 
} 
+1

Можете ли вы дать пример проекта, плз это очень срочно – VenomVendor

5

Решение Aniket Awati наилучшим образом подходит для меня. Однако я бы предложил улучшение, чтобы избежать прокрутки двух объектов в определенных случаях.

int mSelection = 0; 

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
     float velocityY) { 
    boolean leftScroll = isScrollingLeft(e1, e2); 
    boolean rightScroll = isScrollingRight(e1, e2); 

    if (rightScroll) { 
     if (mSelection != 0)    
      setSelection(--mSelection, true); 
    } else if (leftScroll) { 

     if (mSelection != getCount() - 1) 
      setSelection(++mSelection, true); 
    } 
    return false; 
} 
Смежные вопросы