gpt4 book ai didi

android - 在 Android 上显示具有良好性能的巨大 map ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:30 25 4
gpt4 key购买 nike

我是一个“初学者”,大约 6 个月前开始进行 Android 开发。我真的对这个话题充满热情,我读了几本书:

这些书使我很多了解了 Android 的工作方式。但我现在缺少的是……经验。所以我决定贡献一个项目,其目标是显示一张巨大的地铁 map ——当然,该项目的目标更广泛,但谈论它与这个问题无关。

map 离线存储,在我的应用程序包中。

用什么?

  • 无法使用 Google map ,因为我的应用程序的 map 与 Google map 几乎没有关系。
  • 使用简单的 ImageView 来显示 map 是“不可能的”,因为不支持缩放、平移等,而且我自己编写代码远远超出了我的能力范围。
  • 我发现的唯一不错的解决方法是使用 WebView,因为支持缩放和平移

此外,仅使用一张大图像无法达到目的:它会导致 extreme image quality loss .

问题是什么

  • 我无法使用单张图片,因为当图片超过 1300 像素左右时,Android 会自动降低质量(参见上面的链接)。
  • 我想以最低 2000 像素的分辨率显示我的 map (xhdpi 屏幕在其 1280 像素宽的屏幕上显示整个图像,但我希望它们也能够缩放)。
    • 使用多密度图像(您知道,ldpimdpihdpixhdpi 的不同版本设备)是不可能的,因为它们急剧增加了 APK 的文件大小......
  • 通过将我的 map 分成 5 个不同的图 block ,并针对所有屏幕密度仅使用一张图像,一切似乎都还不错……除了 WebView performance is awful .

最后一个解决方案的代码

我将我的大 map 分成 5 个不同的 map 图 block ,它们基本上是横向格式的矩形。我将它们全部 (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 */

应用执行

我的问题

显示大型自定义 map 、性能良好且相对易于使用的最佳方式是什么? 我的解决方案可以接受吗?如何修复这些缺陷?我阅读了很多 StackOverflow 关于所有这些(自定义 map 、WebView 性能)的问题,但没有一个对我有帮助。

期待您的帮助,在此先感谢您。

最佳答案

我认为将大图像拆分成多个图 block 是一种很好的方法,但我认为您需要更进一步,而不仅仅是 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>

关于android - 在 Android 上显示具有良好性能的巨大 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10471118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com