我按照此主题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;
}
}
当它滚动到我的画廊的末尾时,它停止了。现在我想检测我的画廊是否滚动到底。如果是,请向左滚动到第一个项目。我应该如何编辑我的课程来存档?
答案 0 :(得分: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);
}
当然,这只是一个快速的黑客攻击。如果你想要很好的动画,其中画廊很好地回滚到第一个项目,那么你必须做更多的工作,但想法是一样的。
答案 1 :(得分:0)
这个表格对我有用:
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);
}