【问题标题】:MapContainer show only on click/touchMapContainer 仅在点击/触摸时显示
【发布时间】:2019-01-01 21:39:58
【问题描述】:

我正在尝试使用朴素地图。

我在模拟器中放置了一个 MapContainer 内部的表单组件,但 From 显示空白,其中没有地图。当我单击视口时,只要鼠标按钮保持按下状态,地图就会显示。当我释放它再次消失。

这是一个真正的问题还是模拟器的故障?如果这是一个真正的问题,我做错了什么?

下面是我正在使用的类:

package com.mainsys.zappeion;

import com.codename1.googlemaps.MapContainer;
import com.codename1.maps.Coord;
import com.codename1.ui.Form;
import com.codename1.ui.layouts.BorderLayout;

/**
 *
 * @author Christoforos
 */
public class ZappeionMap extends com.codename1.ui.Form {
     private Form current;

      public ZappeionMap() {
        super("Ζάππειον", new BorderLayout());

    }

     @Override
    public void show() {
        if(current != null){
            current.show();
            return;
        }
        final MapContainer cnt = new MapContainer();
        this.addComponent(BorderLayout.CENTER, cnt);
        cnt.setCameraPosition(new Coord(41.889, -87.622));
        super.show();
    }

}

/********** 执行 Shai 的回答 ******************/

我将代码更改为 Shai 建议的 show my class now:

package com.mainsys.zappeion;

import com.codename1.googlemaps.MapContainer;
import com.codename1.location.Location;
import com.codename1.location.LocationManager;
import com.codename1.maps.Coord;
import com.codename1.ui.BrowserComponent;
import com.codename1.ui.FontImage;
import com.codename1.ui.Form;
import com.codename1.ui.layouts.BorderLayout;
import com.codename1.ui.plaf.Style;

/**
 *
 * @author Christoforos
 */
public class ZappeionMap extends com.codename1.ui.Form {
     private Form current;
private static final String HTML_API_KEY = "AIzaSyDHlFJK561bQVs0AyBm1M5xWS_YCHNuPfc";
      public ZappeionMap() {
        super("Ζάππειον", new BorderLayout());
        final MapContainer cnt = new MapContainer( HTML_API_KEY );
        this.addComponent(BorderLayout.CENTER, cnt);
        cnt.setCameraPosition(new Coord(41.889, -87.622));
    }      
}

它仍然有同样的问题。屏幕是空白的。地图只在我点击屏幕时显示。

我还注意到其他事情。在调试器上,我收到消息:

WARNING: Apple will no longer accept http URL connections from applications you tried to connect to http://tile.openstreetmap.org/4/2/9.png to learn more check out https://www.codenameone.com/blog/ios-http-urls.html

为什么它试图连接到http://tile.openstreetmao.org。它应该适用于谷歌地图而不是开放街道地图。

还有一个信息,也许它是值得的。我在真实设备上测试它。屏幕仍然在闪烁,但是当我触摸屏幕时它不会显示任何想法,而模拟器则相反,当我单击屏幕时会出现地图。

我在 centos 7 上使用 netbeans 8.2

感谢任何帮助。

谢谢克里斯托弗罗斯。

【问题讨论】:

  • 您在没有 JavaScript 密钥的情况下构建了地图以访问谷歌地图。我建议再次查看这里的步骤:codenameone.com/blog/new-improved-native-google-maps.html
  • @ShaiAlmog 我更改了我的代码,正如您在上次编辑中看到的那样。我使用 api 键构建地图。还是一样。我只有在点击地图时才能看到它。
  • 如果您以这种方式构建地图并且仍然收到这些消息,则意味着您错过了配置中的一步,因为不应出现开放街道地图。您可能得到一个异常或打印输出高于控制台中的输出。

标签: codenameone


【解决方案1】:

为什么要覆盖表单的 show 方法,而不是在构造函数中构造 UI?

看起来您从生命周期类中复制了一些代码并将其与表单子类混合,例如当前变量。

这更接近正确:

public class ZappeionMap extends com.codename1.ui.Form {
     private Form current;

     public ZappeionMap() {
        super("Ζάππειον", new BorderLayout());
        final MapContainer cnt = new MapContainer();
        this.addComponent(BorderLayout.CENTER, cnt);
        cnt.setCameraPosition(new Coord(41.889, -87.622));
     }

}

【讨论】:

  • 对不起,这不起作用。你可以看到我对这个问题的编辑。
猜你喜欢
  • 1970-01-01
  • 2013-02-24
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
相关资源
最近更新 更多