我是6个月前开始Android开发的“初学者”。我对这个话题非常热情,我读过几本书:
这些书让我能够像Android一样理解很多。但是现在缺少的是......经验。所以我决定为一个项目做出贡献,该项目的目标是显示一个巨大的地铁地图 - 当然,该项目的目标更广泛,但谈论它与这个问题无关。
地图离线存储,位于我的应用程序包中。
此外,仅使用一个大图片无法解决问题:它会导致extreme image quality loss。
我将我的巨大地图分成5个不同的地图图块,这些图块基本上是横向格式的矩形。我把它们全部(map [1-5] .jpg)和一个HTML文件(map.html)放到./assets/文件夹中。 HTML文件的代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Huge map</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="user-scalable=yes, height=device-height, target-densityDpi=device-dpi">
<style type="text/css">
html, body, p, img { margin: 0; }
img { border: 0; }
p { height: 100%; min-height: 100%; }
</style>
</head>
<body>
<p><!-- Displaying a 2000×2000px map -->
<img src="file:///android_asset/map1.jpg" alt=""><br> <!-- 2000×408px -->
<img src="file:///android_asset/map2.jpg" alt=""><br> <!-- 2000×408px -->
<img src="file:///android_asset/map3.jpg" alt=""><br> <!-- 2000×408px -->
<img src="file:///android_asset/map4.jpg" alt=""><br> <!-- 2000×408px -->
<img src="file:///android_asset/map5.jpg" alt=""> <!-- 2000×368px -->
</p>
</body>
</html>
然后我加载我的Java代码并将其应用到我的布局(这只是一个WebView):
import me.diti.test.R;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class MapActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map); // ./res/layout/map.xml with a <WebView>
WebView mWebView = (WebView) findViewById(R.id.mapWebView); // The WebView’s id is mapWebView
WebSettings webSettings = mWebView.getSettings();
webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); // Attempt at getting better performance…
webSettings.setAppCacheEnabled(false); // Offline map: no need for cache
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);
webSettings.setSupportZoom(true);
webSettings.setBuiltInZoomControls(true);
mWebView.setInitialScale(100);
mWebView.setScrollBarStyle(WebView.SCROLLBARS_INSIDE_OVERLAY);
mWebView.loadUrl("file:///android_asset/map.html"); // We load the map (includes 5 big images)
}
/* This is a minimal “working” example, no need for menu inflation and activity handling */
min-height
似乎不起作用); 显示庞大的自定义地图的最佳方式是什么,具有良好的性能和相对容易使用? 我的解决方案可以接受吗?如何解决这些缺陷?我读了很多关于所有这些问题的StackOverflow问题(自定义地图,WebView性能),但没有一个帮助过我。
期待您的帮助,请提前感谢您。
答案 0 :(得分:1)
使用简单的ImageView来显示地图是“不可能的”,因为不支持缩放,平移等,而且我自己编码远远超出了我的能力。
您可以找到用于平移和缩放ImageView
的第三方代码,例如this one,但这可能对您没有帮助。
显示庞大的自定义地图的最佳方式是什么,具有良好的性能和相对容易使用?
使用基于图块的地图查看器。 OSMDroid has some support for this。
答案 1 :(得分:1)
我认为将大图像分割成图块是一种很好的方法,但我认为你需要比仅仅5张图像更进一步。尝试将其分成10x10网格中的100个200x200图像(或8x8等中的64个250x250图像)。然后使用<table>
在现有的WebView
中显示它们。
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td><img src="file:///android_asset/map00.00.jpg" border="0"></td>
<td><img src="file:///android_asset/map00.01.jpg" border="0"></td>
...
<td><img src="file:///android_asset/map00.09.jpg" border="0"></td>
</tr>
<tr>
<td><img src="file:///android_asset/map01.00.jpg" border="0"></td>
<td><img src="file:///android_asset/map01.01.jpg" border="0"></td>
...
<td><img src="file:///android_asset/map01.09.jpg" border="0"></td>
</tr>
...
</table>