如何控制 Android 视图中的轨迹球行为?

发布于 2024-07-22 06:58:47 字数 1178 浏览 3 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱的那么颓废 2024-07-29 06:58:47

诀窍是在自定义视图中覆盖 dispatchTrackball 并获取事件。

我希望这可以帮助别人。

The trick is to override the dispatchTrackball in your custom view, and grab the events.

I hope this helps someone.

一个人的旅程 2024-07-29 06:58:47

平移只是通过前面提到的 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文