【问题标题】:Android how to make Gallery auto scroll to first item?Android如何让Gallery自动滚动到第一项?
【发布时间】:2015-01-16 02:56:48
【问题描述】:

我按照这个主题auto scroll a Gallery widget 创建了一个画廊,每 5 秒自动从左到右滚动一次。这是我的画廊:

public class MyBannersGallery extends Gallery {

private Handler handler;

public MyBannersGallery(Context ctx, AttributeSet attrSet) {
    super(ctx, attrSet);
    handler = new Handler();
    postDelayedScrollNext();
}

private void postDelayedScrollNext() {
    handler.postDelayed(new Runnable() {
        public void run() {
            postDelayedScrollNext();
            onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
        }
    }, 5000);

}

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

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    int kEvent;
    if (isScrollingLeft(e1, e2)) {
        kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
    } else {
        kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
    }
    onKeyDown(kEvent, null);
    return true;
}

}

当它滚动到我的画廊的尽头时,它停止了。现在我想检测我的画廊是否滚动到最后。如果是这样,请向左滚动到第一项。我应该如何编辑我的课程以存档?

【问题讨论】:

    标签: android scroll gallery


    【解决方案1】:

    Gallery 扩展自 AdapterView,因此您可以使用方法 'getSelectedItemPosition()' 来确定当前图像索引的位置。那么也许这样的事情会起作用?

    private void postDelayedScrollNext() {
        handler.postDelayed(new Runnable() {
            public void run() {
                // check to see if we are at the image is at the last index, if so set the 
                // selection back to 1st image.
                if (getSelectedItemPosition() == getCount() - 1) {
                   setSelection(0);
                   postDelayedScrollNext();
                   return;
                }
                postDelayedScrollNext();
    
                onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
            }
        }, 5000);
    
    }
    

    当然,这只是一个快速破解。如果您想要画廊很好地滚动回第一个项目的漂亮动画,那么您必须做额外的工作,但想法是一样的。

    【讨论】:

    • 谢谢。我也刚刚发现了 getSelectedItemPosition() 方法。无论如何感谢您的回复。
    • 我对 postDelayedScrollNext() 的工作原理感到困惑,如果它是关于每 5 秒自动滚动一次,为什么我们需要 onKeyDown(..)
    【解决方案2】:

    这个表格适合我:

    public MyBannersGallery(Context context, AttributeSet attrs) {
        super(context, attrs);
        handler = new Handler();
        postDelayedScrollNext(0);
    }
    
    private void postDelayedScrollNext(final int position) {
        handler.postDelayed(new Runnable() {
            public void run() {
                 if (getSelectedItemPosition() == getCount() - 1) {
                   setSelection(0);
                   postDelayedScrollNext(0);
                   return;
                }
                setSelection(position+1);
                postDelayedScrollNext(position+1);
    
            }
        }, 4000);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多