地图是由一张张小图片拼接而成的。
目前是这么实现的,但运行速度很慢,拖拽速度更是惨不忍睹。源码不方便直接给,给出目前实现方法1.自定义一个MapView,继承View,重写OnDraw方法,在ondraw里用canvas一张张图片读取后画上去(canvas.drawBitmap),这样实现了拼接2.拖拽,重写onTouchEvent,计算拖拽后需要加载的图片,然后重绘地图(触发onDraw)。也就是每次拖拽都会重绘一次,效率很低。
以上都是单线程。
现在想用多线程异步加载图片,可是在其他线程中加完图片后想显示就得使用invalidate,postInvalidate方法,这些都会触发ondraw方法来重绘所有图片。求高手帮忙,不甚感激上面说的可能有些乱,以下是一些简单的类似伪代码,希望能把问题表达清楚class MapView extends View{
private List<Bitmap>() imgs = null;
public void onDraw(Canvas canvas){
//获得需要加载的图片列表
//canvas.draw...............绘制图片
}
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_MOVE:
//imgs=...更新需要显示的图片列表
invalidate();
}
}
}
目前是这么实现的,但运行速度很慢,拖拽速度更是惨不忍睹。源码不方便直接给,给出目前实现方法1.自定义一个MapView,继承View,重写OnDraw方法,在ondraw里用canvas一张张图片读取后画上去(canvas.drawBitmap),这样实现了拼接2.拖拽,重写onTouchEvent,计算拖拽后需要加载的图片,然后重绘地图(触发onDraw)。也就是每次拖拽都会重绘一次,效率很低。
以上都是单线程。
现在想用多线程异步加载图片,可是在其他线程中加完图片后想显示就得使用invalidate,postInvalidate方法,这些都会触发ondraw方法来重绘所有图片。求高手帮忙,不甚感激上面说的可能有些乱,以下是一些简单的类似伪代码,希望能把问题表达清楚class MapView extends View{
private List<Bitmap>() imgs = null;
public void onDraw(Canvas canvas){
//获得需要加载的图片列表
//canvas.draw...............绘制图片
}
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_MOVE:
//imgs=...更新需要显示的图片列表
invalidate();
}
}
}
麻烦你看下我的问题,盼复!