我在android中的地图项目中工作.它包含10000x10000分辨率的更大图像.使用此图像Bitmap给出OutOfMemoryError.所以我想平铺并滚动这个图像.当我滚动图像时,只有可见屏幕必须有瓷砖,其他隐形瓷砖必须回收.我花了很多时间但没有找到任何东西.
任何帮助将不胜感激.为我提供更好的解决方案或想法
根据Dave的建议,您可以将图像分成1600个250x250px的部分.Photoshop可以在不到一分钟的时间内完成此操作(此处).您也不必担心自己编写html.一旦你有html(让我们称之为bigimage.html)和images文件夹,将它们放在你的资源文件夹中并以这种方式访问它们 -
setContentView(webView);
try {
webView.loadUrl("file:///android_asset/bigimage.html";
webView.getSettings().setLoadsImagesAutomatically(true);
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
从API级别10开始,您可以使用BitmapRegionDecoder从图像加载特定区域,而无需手动生成切片图像.我最近开发了一个lib,它通过触摸手势处理提供大图像的可视化.源代码和示例可在https://github.com/diegocarloslima/ByakuGallery上获得
您可以将图像平铺成方形图块(例如 256x256 像素)。
您可以对 进行子类化View,并在成员变量中维护距中心 [0,0] 的当前偏移量。
您应该onDraw(Canvas)根据当前偏移量绘制可见的图块(很容易计算哪些应该可见,因为您知道当前的平移偏移量、每个图块的大小和屏幕的大小。只需将图块绘制Bitmaps到Canvas.
然后onTouchEvent在您的 Activity 中进行处理。您可以处理MotionEvent.ACTION_MOVE仅在当前可见图块周围移动的位置,然后MotionEvent.ACTION_UP进行真正的重绘并调用线程来获取新图块(这样您就不会在每次手指移动时执行昂贵的操作)。使用 View 的invalidate()方法强制其在平移后重新绘制。