gpt4 book ai didi

android - 让 Android 的 ZoomButtonsController 和 GestureDetector 相处融洽

转载 作者:行者123 更新时间:2023-11-29 22:19:45 25 4
gpt4 key购买 nike

我已经坚持了一段时间,虽然我找到了一个解决方法,但我不太明白为什么它有效,我应该实现它适本地!那里似乎也缺乏关于 ZoomButtonsController 的信息。

根据这里的其他文章,我在我的应用程序中实现了“滑动”手势功能。但是,只需单击一下,我还希望缩放按钮以编程方式出现。对于这个 ScrollView,我已经有了基于 GestureDetector 的 OnTouchListener,所以我也为它添加了一个 ZoomButtonsController 作为 OnZoomListener(以及处理 onSingleTapConfirmed 和其他类似事情的代码)。

一切正常 - 直到出现缩放按钮。从那时起(假设持续可见),即使在缩放按钮消失之后,手势也不起作用,甚至点击也不起作用!当缩放按钮在屏幕上时,您可以单击它们,滚动仍然可以正常工作,但手势消失了。

我终于想到了一个“修复”:如果 OnZoomListener.onVisibilityChanged() 触发到不可见状态,我调用 myScrollView 的 setOnTouchListener() 来恢复 gestureListener(就像我在 onCreate() 中所做的那样)。手势再次正常工作。

编辑:如果您在 onVisibilityChanged() 触发为可见时执行此操作,您会立即获得手势,但它会禁用缩放按钮,因此效果不是很好!两者都很好...

那么,我正在做的是使用 ZoomButtonsController 的正确方法吗?如果不是,那是什么?更重要的是,为什么当缩放按钮出现时,它们似乎永久取代了我的 OnTouchListener?ZoomButtonsController 应该在触发后劫持当前的手势吗?这是否比那更基本(听众的一些一般属性)?

最佳答案

在找到解决方案之前,我已经为这个问题苦苦挣扎了一段时间。我不确定它是否是最正确的,但它运行完美。

概念:

1 - 不要将 ZoomButtonsController 小部件直接添加到需要它们的 View 中。 onTouch 事件将发生冲突。相反,您需要将 ZoomButtonsController 小部件添加到新 View ,并将此 View 添加到与您要将缩放按钮添加到的 View 相同的布局。

2 - 添加了 ZoomButtonsController 的 View 必须是最后添加到父布局的 View 。这样它将是第一个被调用的,如果未按下缩放按钮,onTouch 事件将传递到您的 View 以供您处理。

示例代码:

    //First my view where I need the zoom buttons
imageView = new ImageView(context);
LayoutParams layoutParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
imageView.setLayoutParams(layoutParams);
imageView.setOnTouchListener(onTouchListener);
relativeLayout.addView(imageView);

//Secondly the view where the buttons are added
View zoomView = new View(context);
LayoutParams layoutParamsZoom = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
zoomView.setLayoutParams(layoutParamsZoom);
relativeLayout.addView(zoomView);
zoomButtonsController = new ZoomButtonsController(zoomView);
zoomButtonsController.setOnZoomListener(onZoomListener);

最后,您只需要将监听器添加到缩放小部件:

ZoomButtonsController.OnZoomListener onZoomListener = new ZoomButtonsController.OnZoomListener() {

@Override
public void onZoom(boolean zoomIn) {
Log.d(TAG, "onZoom: " + zoomIn);
if(zoomIn){
setZoom(currentZoom +1);
}else{
setZoom(currentZoom -1);
}
}

@Override
public void onVisibilityChanged(boolean visible) {
// TODO Auto-generated method stub
}
};

祝你好运,路易斯

关于android - 让 Android 的 ZoomButtonsController 和 GestureDetector 相处融洽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7555482/

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