- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经坚持了一段时间,虽然我找到了一个解决方法,但我不太明白为什么它有效,我应该实现它适本地!那里似乎也缺乏关于 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/
好吧,我已经无计可施了。 我不知道如何use android.widget.ZoomButtonsController .我想要的只是有一个缩放控件,我 [show|hide|[enable|disa
本文整理了Java中android.widget.ZoomButtonsController.setOnZoomListener()方法的一些代码示例,展示了ZoomButtonsController
本文整理了Java中android.widget.ZoomButtonsController.setVisible()方法的一些代码示例,展示了ZoomButtonsController.setVis
本文整理了Java中android.widget.ZoomButtonsController.()方法的一些代码示例,展示了ZoomButtonsController.()的具体用法。这些代码示例主要
Android 中的布局让我很困惑。我正在慢慢实现自定义 ImageView,我想在其中使用 ZoomButtonsController。但是,我想决定缩放按钮在布局中的位置,但我不知道如何将它们从默
我希望我的应用程序在用户触摸 GLSurfaceView 时在 GLSurfaceView 上显示 ZoomButtonsController。我的 Activity 构造函数如下所示: _zoomB
我已经坚持了一段时间,虽然我找到了一个解决方法,但我不太明白为什么它有效,我应该实现它适本地!那里似乎也缺乏关于 ZoomButtonsController 的信息。 根据这里的其他文章,我在我的应用
我看到这个异常在我的应用程序中偶尔出现(在野外)。WebView 用于显示 jpg(使用 Android 版本/设备的缩放/滚动功能,而不是重新发明轮子并执行所有反射操作)。 我不知道为什么最终会
很遗憾,我没有 XOOM 设备,3.0 模拟器不可能即使在最新的 2011 macbook pro 上也无法运行。 我已要求其中一位用户向我发送错误日志,但最奇怪的事情又回来了。许多错误日志! 现在,
使用 map 时,我有一个事件,该事件在没有连接可用时启动,并使用离线 map (MapQuest)。事件运行良好,显示了 map ,以及所有叠加层,标记等。当用户单击标记信息窗口中的一个时,将启动另
我是一名优秀的程序员,十分优秀!