如何在android中平铺和滚动大图像(10000x1000)
我在安卓的地图项目中工作。它包含10000x1000分辨率的较大图像。将此图像与如何在android中平铺和滚动大图像(10000x1000),android,Android,我在安卓的地图项目中工作。它包含10000x1000分辨率的较大图像。将此图像与位图一起使用会产生OutOfMemoryError。所以我想平铺和滚动这个图像。当我滚动图像时,只有可见屏幕必须有瓷砖,其他不可见的瓷砖必须回收。我花了很多时间,但什么也没找到 任何帮助都将不胜感激。 为我提供更好的解决方案或想法。您可以将图像平铺成方形平铺(例如256x256像素) 您可以子类化视图,并在成员变量中保持与中心[0,0]的当前偏移量 在onDraw(Canvas)中,您应该根据当前偏移量绘制可见的分幅
位图一起使用
会产生OutOfMemoryError
。所以我想平铺和滚动这个图像。当我滚动图像时,只有可见屏幕必须有瓷砖,其他不可见的瓷砖必须回收。我花了很多时间,但什么也没找到
任何帮助都将不胜感激。
为我提供更好的解决方案或想法。您可以将图像平铺成方形平铺(例如256x256像素) 您可以子类化
视图
,并在成员变量中保持与中心[0,0]的当前偏移量
在onDraw(Canvas)
中,您应该根据当前偏移量绘制可见的分幅(由于您知道当前平移偏移量、每个分幅的大小和屏幕的大小,因此很容易计算哪些应该可见)。只需将分幅作为位图绘制到画布上即可
然后在活动中处理onTouchEvent
。您可以处理MotionEvent.ACTION\u MOVE
只在当前可见的分幅上移动,然后在MotionEvent.ACTION\u UP
上执行真正的重新绘制并调用线程来获取新分幅(这样您就不会在每次手指移动时都执行昂贵的操作).使用视图的invalidate()
方法,强制其在平移后重新绘制。我认识的某个人遇到了相同的问题。他们首先将图像分割为方形平铺,然后生成一个HTML页面,以
布局显示图像,并让内置浏览器显示生成的页面。这意味着浏览器管理图像的可视性,并为您提供双向滚动和收缩缩放功能
这种方法很容易编码,但会失去编写自定义解决方案的灵活性。这是针对较小的图像(2000x1500 ish),因此我不确定它将如何扩展到您需要的尺寸
如果你这样做,确保你的桌子上有border=“0”cellpadding=“0”cellspacing=“0”
,图像上有border=“0”
,以确保连接是无缝的。根据Dave的建议,你可以将图像分成1600个250x250px的部分。Photoshop可以在不到一分钟的时间内轻松做到这一点()。您也不必担心自己编写html。一旦您拥有html(让我们称之为bigimage.html)和图像文件夹,请将它们都放在您的资产文件夹中,并通过以下方式访问它们-
setContentView(webView);
try {
webView.loadUrl("file:///android_asset/bigimage.html";
webView.getSettings().setLoadsImagesAutomatically(true);
} catch (Exception e) {
e.printStackTrace();
}
从API级别10开始,您可以使用BitMapRegionCoder
从图像中加载特定区域,而无需手动生成平铺图像。我最近开发了一个库,该库通过触摸手势处理提供大图像的可视化。源代码和示例可在上找到。您是否正在寻找一些开源程序可以这样做吗?或者你只是对算法感兴趣吗?你好,格雷格,任何一个都可以为我工作。相关问题:@ankitagahoi:我现在和你面临着同样的问题。我使用自定义视图和Ract来绘制。但是我在设备上看不到图像。我可以在蓝色堆栈上看到完整的图像和画布,但是什么n我在设备中安装它不会工作。我可以知道它在设备中如何工作吗hello Axarydax Thanx供您快速回复。事实上,我是android新手,您能否提供示例代码..hello dave.c实际上这是脱机应用程序,我无法使用浏览器。因此请提供另一个解决方案。此解决方案脱机工作,因为您的应用程序会动态创建HTML在手机中,然后让浏览器显示它。无需网络访问。您也可以生成HTML并使用WebView
来显示它。请告诉我们您是如何使用此方法为Google Maps项目创建覆盖图的?我自己也尝试过用BitmapRegionD来平铺它ecoder
,但图像似乎已损坏。我对这种方法感兴趣,但我不确定是否可以使用HTML为地图视图
创建一个透明的覆盖层
。您需要
的任何原因?多个
也可以吗?