Pinchで拡大縮小
February 19 [Sat], 2011, 18:31
Androidで自前の地図表示をするためのあれこれ。
Targetは2.1以降なので、拡大縮小表示はPinchでやることに。
Viewの拡張クラスでonTouchEvent()をoverrideして、
MotionEvent.ACTION_POINTER_DOWNとMotionEvent.ACTION_POINTER_UP、
途中も必要ならMotionEvent.ACTION_MOVEのイベントを処理。
DOWN時の距離と、MOVEやUPの時の距離で 倍率を計算し、画像をそれに合わせて描画するだけ。
元の地図はかなり大きいので(54000x6000dot)、200x200程度のセルに分割し、さらに4段階のミップマップを
使ってるが、ZOOM中に真面目に縮尺変更->描画をやっているともたついて気持ちよくないため、
普段はBitmapに一旦描画してからViewのcanvasにそれを転送し、ZOOM中はBitmapを拡縮表示だけして
対応することにした。
オンライン書店 boople.com
Targetは2.1以降なので、拡大縮小表示はPinchでやることに。
Viewの拡張クラスでonTouchEvent()をoverrideして、
MotionEvent.ACTION_POINTER_DOWNとMotionEvent.ACTION_POINTER_UP、
途中も必要ならMotionEvent.ACTION_MOVEのイベントを処理。
DOWN時の距離と、MOVEやUPの時の距離で 倍率を計算し、画像をそれに合わせて描画するだけ。
元の地図はかなり大きいので(54000x6000dot)、200x200程度のセルに分割し、さらに4段階のミップマップを
使ってるが、ZOOM中に真面目に縮尺変更->描画をやっているともたついて気持ちよくないため、
普段はBitmapに一旦描画してからViewのcanvasにそれを転送し、ZOOM中はBitmapを拡縮表示だけして
対応することにした。
protected void onDraw(Canvas canvas) {
if(mTouchMode == MODE_ZOOM){
canvas.drawColor(Color.BLACK); // 背景塗りつぶし
canvas.drawBitmap(mCanvasBmp,mCanvasMatrix,null);
}else{
updateCanvasBmp(new Canvas(mCanvasBmp));
canvas.drawBitmap(mCanvasBmp,0,0,null);
}
}
private void updateCanvasBmp(Canvas canvas){
getBackground().draw(canvas); // 背景塗りつぶし
// 地図描画省略
}
オンライン書店 boople.com
- Android |
- URL |
- Comment [0] |
- Trackback [0]


