ユーザーが地図に触れた場所ならどこでも、動的に描画する必要がある形状を描画したいと思います。私はこれらの形を描くことについて何も考えていません。どうすればこれを達成できますか?キャンバスを介してこれを行うことはできますか? MapFragment を使用しています。
画像をご覧ください。
どなたか教えてください!! どんな助けでも大歓迎です!!
ユーザーが地図に触れた場所ならどこでも、動的に描画する必要がある形状を描画したいと思います。私はこれらの形を描くことについて何も考えていません。どうすればこれを達成できますか?キャンバスを介してこれを行うことはできますか? MapFragment を使用しています。
画像をご覧ください。
どなたか教えてください!! どんな助けでも大歓迎です!!
View
マップにオーバーレイを追加することでそれを行うことができます。
Polyline
あなたの行になるオブジェクト(最初は空)を持っていますView
LatLng
使用するように変換するProjection
Polyline
これで完了です。
これにより、そうでなければマップのパンまたはズームを行うすべてのイベントが消費されることに注意してください。マップを操作するか、何らかのフラグを使用してイベントを消費できるようにする別の方法が必要です。
マップに任意のボタンを追加して、ImageView を前面に移動し、マップが背景に表示されるようにします。4.ImageView をタッチすると、以下のアクションを実行します
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
Point p = new Point();
path = new Path();
float upX;
float upY;
switch (action) {
case MotionEvent.ACTION_DOWN:
laArray = "";
lnArray = "";
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
downx = event.getX();
downy = event.getY();
eventX = downx;
eventY = downy;
Log.d("", "startx" + eventX);
p.x = (int) downx;
p.y = (int) downy;
LatLng latlngpoint;
latlngpoint = map.getProjection().fromScreenLocation(p);
break;
case MotionEvent.ACTION_MOVE:
upx = event.getX();
upy = event.getY();
canvas.drawLine(downx, downy, upx, upy, paint);
drawable.invalidate();
downx = upx;
downy = upy;
Log.d("", "Action_Move");
Log.d("", "downx, downy: " + downx + "," + downy);
Log.d("", "upx, upy: " + upx + "," + upy);
p.x = (int) upx;
p.y = (int) upy;
LatLng latlngpoint1;
latlngpoint1 = map.getProjection().fromScreenLocation(p);
break;
case MotionEvent.ACTION_UP:
upX = event.getX();
upY = event.getY();
p.x = (int) upX;
p.y = (int) upY;
Log.d("", "Action Up");
canvas.drawLine(eventX, eventY, upX, upY, paint);
LatLng latlngpoint2;
latlngpoint2 = map.getProjection().fromScreenLocation(p);
drawable.invalidate();
// When finger is Up, Start UserSearch.
StartUserSearch(); //user defined function
return true;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
return true;
}
このように ImageView を追加し、
<ImageView
android:id="@+id/viewOnMap"
style="@style/AppTheme"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
</ImageView>
そのため、マップ上の描画ボタンをクリックすると、
ImageView drawable= (ImageView) findViewById(R.id.viewOnMap);
drawable.setVisibility(View.VISIBLE);
drawable.bringToFront();
これで、imageView に描画できるはずですが、マップ上に描画しているようです。
要件に応じてコードを変更できます。これが役立つことを願っています。