如何控制 Android 视图中的轨迹球行为?
我有一个 FrameLayout 视图,其中包含一个(类似 MapView 的)控件和一些覆盖它的附加按钮。 (布局 xml 如下)。
我想允许用户不仅使用触摸还使用轨迹球平移/滚动主视图。 问题是 - 使用轨迹球只是在布局上的所有控件之间切换焦点,而且我似乎找不到一种方法将 onTrackballEvent 仅包含在 MainView 中。
欢迎任何建议,提前致谢。
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<FrameLayout android:id="@+id/pageView"
xmlns:panel="http://schemas.android.com/apk/res/com.yappa"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<MainView
android:id="@+id/mainView"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</MainView>
<ZoomControls android:id="@+id/ZoomControls01"
android:layout_gravity="bottom|center"
android:layout_height="wrap_content" android:layout_width="wrap_content">
</ZoomControls>
<Panel
....
</Panel>
</FrameLayout>
</merge>
I have a FrameLayout view which contains one (MapView-like) control and some additional buttons overlaying it. (the layout xml is below).
I want to allow the user to pan/scroll the main view using not only touch but also the Trackball.
The problem is - using the trackball just switches the focus between all the controls on the layout, and I cannot seem to find a way to contain the onTrackballEvent to just the MainView.
Any suggestions are welcome, thanks in advance.
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<FrameLayout android:id="@+id/pageView"
xmlns:panel="http://schemas.android.com/apk/res/com.yappa"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<MainView
android:id="@+id/mainView"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</MainView>
<ZoomControls android:id="@+id/ZoomControls01"
android:layout_gravity="bottom|center"
android:layout_height="wrap_content" android:layout_width="wrap_content">
</ZoomControls>
<Panel
....
</Panel>
</FrameLayout>
</merge>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
诀窍是在自定义视图中覆盖
dispatchTrackball
并获取事件。我希望这可以帮助别人。
The trick is to override the
dispatchTrackball
in your custom view, and grab the events.I hope this helps someone.
平移只是通过前面提到的 focusable 属性来实现,将地图视图的 focusable 属性设置为 true,当您将地图视图置于焦点中时,它确实会使用轨迹球平移地图。
Panning is simply implemented by as mentioned before the focusable property, set your mapview's focusable attribute to true and it will indeed pan the map with the trackball when you have placed the mapview in focus.