gpt4 book ai didi

android - 更改 SlidingDrawer 响应轨迹球或光标的方式

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:34 25 4
gpt4 key购买 nike

(请注意,此问题中描述的行为只是因为我们正在做的其他看似无关的事情而出现。参见 the accepted answer。)

我们有一个带有 GridViewSlidingDrawer 的 Android Activity 在 RelativeLayout 中。此 Activity 响应轨迹球(或光标键)的方式相当奇怪。焦点将在 GridView 中的项目之间移动,但只要光标在 GridView 的“外部”方向上移动。 (例如,在顶部时向上,在最左边的项目时向左)滑动抽屉打开或关闭。值得注意的是,焦点停留在 GridView 中的同一项目上——它不会移动到滑动抽屉。

对于轨迹球,这尤其可怕,因为将轨迹球旋转到你真正的目的地会导致滑动抽屉反复打开和关闭。

我们已经确定我们可以通过覆盖 onTrackballEvent() 完全关闭轨迹球。我们希望轨迹球和光标在 GridView 上正常工作,但不会导致滑动抽屉打开或关闭。原则上,我们还希望轨迹球在滑动抽屉打开时专注于滑动抽屉的各种内容。

如何?

最佳答案

您可以考虑创建自定义 View 扩展 GridViewSlidingDrawer 并使用 onInterceptTouchEventonTouchEvent 的自定义实现GridViewSlidingDraweronInterceptTouchEvent 自定义实现。您可能不需要实现自定义 SlidingDrawer,具体取决于可能在 handle

上触发的用户交互

对于你的自定义 GridView,给它一个接口(interface)可能定义如下:

public interface MyGridViewListener {
public boolean shouldPreventScroll();
}

如果您的自定义 SlidingDrawer 打开,则返回。此返回值将用于确定是否应在 GridView 上执行操作(对于 onInterceptTouchEventonTouchEvent 方法)。因此,当 SlidingDrawer 打开时,在 GridView 上执行的操作不会触发 SlidingDrawer 上的任何内容。

Activity :

MyGridView gridView = (MyGridView) findViewById(R.id.gridView);
gridView.setMyGridViewListener(new MyGridViewListener() {
@Override
public boolean shouldPreventScroll() {
return slidingDrawer.isOpened();
}
});

我的自定义 GridView :shouldIntercept 将在 GridView 上发生触摸/跟踪事件时调用。

private boolean shouldIntercept() {
boolean shouldIntercept = false;
if(myGridViewListener != null) {
shouldIntercept = myGridViewListener.shouldPreventScroll();
}
return shouldIntercept;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return shouldIntercept() ? true : super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return shouldIntercept() ? true : super.onTouchEvent(ev);
}
@Override
public boolean onTrackballEvent(MotionEvent event) {
return shouldIntercept() ? true : super.onTrackballEvent(event);
}
public MyGridViewListener getMyGridViewListener() {
return myGridViewListener;
}
public void setMyGridViewListener(
MyGridViewListener myGridViewListener) {
this.myGridViewListener = myGridViewListener;
}

我希望这能为您指明正确的方向或至少有所帮助

关于android - 更改 SlidingDrawer 响应轨迹球或光标的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8314936/

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