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を拡縮表示だけして
対応することにした。

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
P R
プロフィール
  • プロフィール画像
  • アイコン画像 ニックネーム:sos_jp
読者になる
京都市在住のしがないIT屋。
某携帯メルマガ発行システムのメール周りの開発をやってたり、BREWやAndroidのアプリを作ったりしてます。

Twitterもおんなじアカウントです。
2011年02月
« 前の月  |  次の月 »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28
最新コメント
Yapme!一覧
読者になる