gpt4 book ai didi

android - 自动滚动图库小部件

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:28:20 24 4
gpt4 key购买 nike

我需要实现一个画廊,它一次滚动一个项目,并且可以“自动滚动”:即每隔几秒钟,它会自动滚动到下一个项目。

根据这个线程:Android: Programmatically animate between images in Gallery widget ,我扩展了 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;
}

这很好用。对于自动滚动,我创建了一个处理程序和 postDelayed 一个可运行的,它以相同的方式模拟相同的 DPAD 按键:

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

但这并没有做任何事情!!

我知道 runnable 以正确的时间间隔按预期执行,因为我记录了它并确认了这一点,但是 onKeyDown 不会导致图库滚动或切换项目。为什么这会以一种方法而不是另一种方法起作用?我试着调用我的 onFling,但无济于事。还尝试了 dispatchKeyEvent,但没有成功。

我真的需要让它继续下去,但我也真的很想了解为什么相同的代码在两个不同的地方不会产生相同的结果...这与 Android View 处理输入事件的方式有关吗?我查看了 Gallery 代码以寻找线索,但一无所获!它似乎应该有效。

拜托,我很难过......有什么想法吗?

谢谢

最佳答案

因此,事实证明我的原始逻辑确实有效。实现该逻辑但剥离了我类(class)(下方)中的所有其他内容的自定义画廊按预期工作,因此它一定是我类(class)中的其他东西导致了这个问题。

感谢您的帮助 HighFlyer :)

至少我了解了反射...这是 Java 的一个非常酷的特性。

public class CustomGallery extends Gallery {

private Handler handler;

public CustomGallery(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
handler = new Handler();
postDelayedScrollNext();
}

private void postDelayedScrollNext() {
handler.postDelayed(new Runnable() {
public void run() {
postDelayedScrollNext();
Log.d("CustomGallery", "dpad RIGHT");
onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
}
}, 1000);
}

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)) {
Log.d("CustomGallery", "fling LEFT");
kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
} else {
Log.d("CustomGallery", "fling LEFT");
kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
}
onKeyDown(kEvent, null);
return true;
}

关于android - 自动滚动图库小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8155245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com