3

ユーザーが地図に触れた場所ならどこでも、動的に描画する必要がある形状を描画したいと思います。私はこれらの形を描くことについて何も考えていません。どうすればこれを達成できますか?キャンバスを介してこれを行うことはできますか? MapFragment を使用しています。

画像をご覧ください。

ここに画像の説明を入力

どなたか教えてください!! どんな助けでも大歓迎です!!

4

3 に答える 3

3

Viewマップにオーバーレイを追加することでそれを行うことができます。

  • Polylineあなたの行になるオブジェクト(最初は空)を持っています
  • その上で onTouchEvent を処理するView
  • x,y をイベントからLatLng使用するように変換するProjection
  • に新しいポイントを追加Polyline

これで完了です。

これにより、そうでなければマップのパンまたはズームを行うすべてのイベントが消費されることに注意してください。マップを操作するか、何らかのフラグを使用してイベントを消費できるようにする別の方法が必要です。

于 2013-06-07T11:37:16.433 に答える
2
  1. マップ上に重なる ImageView を追加します。マップに描画できません。
  2. ImageView は「OnTouchListener」を実装する必要があります
  3. マップに任意のボタンを追加して、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 に描画できるはずですが、マップ上に描画しているようです。

要件に応じてコードを変更できます。これが役立つことを願っています。

于 2013-08-05T10:34:22.833 に答える