自动滚动图库小部件

noo*_*ler 6 android android-widget android-gallery

我需要实现一个一次滚动一个项目的画廊,它可以进行'自动滚动':即每隔几秒,它会自动滚动到下一个项目.

根据这个主题:Android:以编程方式在Gallery小部件中的图像之间设置动画,我扩展了Gallery,覆盖onFling以忽略fling事件,而是向左或向右模拟DPAD箭头,以便一次移动单个项目:

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float 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; 
    }
Run Code Online (Sandbox Code Playgroud)

这很好用.对于自动滚动,我创建一个处理程序并postDelayed runnable以相同的方式模拟相同的DPAD键按下:

handler.postDelayed(new Runnable() {
    public void run() { 
        onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
    }
}, AUTO_SCROLL_INTERVAL);
Run Code Online (Sandbox Code Playgroud)

但这没有做任何事!!

我知道runnable以正确的间隔按预期执行,因为我记录并确认了这一点,但是onKeyDown不会导致库滚动或切换项目.为什么这种方法适用于一种方法而不是另一种方法 我试着打电话给我的onFling,但无济于事.也尝试了dispatchKeyEvent,但没有运气.

我真的需要这样做,但我也真的想要理解为什么相同的代码不能在两个不同的地方产生相同的结果......这是否与Android视图处理输入事件的方式有关?我查看了图库代码的线索,但一无所获!好像它应该有效.

拜托,我很难过......任何想法?

谢谢

Hig*_*yer 1

看来您调用的是 Activity 的 onKeyDown 方法,而不是画廊。尝试打电话

gallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null)
Run Code Online (Sandbox Code Playgroud)

反而。如我错了请纠正我