Gallery scroll one image at a time

后端 未结 3 975
无人及你
无人及你 2021-01-16 10:20

how to make a gallery control to scroll one image at a time? Also what is a good way of making a continuous loop of those images? I tried overriding onFling, does not work a

相关标签:
3条回答
  • 2021-01-16 10:59

    This works all the time. on all versions without fail for me.

        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;
    }
    
    0 讨论(0)
  • 2021-01-16 11:08

    Aniket Awati's solution worked best for me. However I would suggest an improvement to avoid two items beings scrolled in certain cases.

    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;
    }
    
    0 讨论(0)
  • 2021-01-16 11:09

    I created new control, called it CustomGallery and extended it from Gallery. In Custom Gallery I placed the following:

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

    In my activity I am using CustomGallery instead of Gallery. This works. One thing, we moved from 2.2 to 2.3 (gingerbread). It didn't work for me before when I tried to override onFling. So I am suspecting this also have something to do with the version of OS.

    0 讨论(0)
提交回复
热议问题