2

少し作業した後、私のルート アプリケーションは正常に動作します。追加したいのはダブルタップズームイン機能だけですが、方法がわかりません。

ヒントを教えていただけますか?

4

6 に答える 6

6

私も答え/例を探していましたが、動作するコードが見つかりませんでした。

最後に、これが私のために働いているコードです:

MyMapActivity.java

public class MyMapActivity extends MapActivity
                           implements OnGestureListener, OnDoubleTapListener {

private MapView mapView;

@Override
public void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mapView = (MapView)findViewById(R.id.mapView);
}

@Override
public boolean onDoubleTap(MotionEvent e) {
    int x = (int)e.getX(), y = (int)e.getY();;  
    Projection p = mapView.getProjection();  
    mapView.getController().animateTo(p.fromPixels(x, y));
    mapView.getController().zoomIn();  
    return true; 
}

// Here will be some autogenerated methods too

OnDoubleTap.java

public class OnDoubleTap extends MapView {

  private long lastTouchTime = -1;

  public OnDoubleTap(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  @Override
  public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
      long thisTime = System.currentTimeMillis();
      if (thisTime - lastTouchTime < ViewConfiguration.getDoubleTapTimeout()) {
        // Double tap
        this.getController().zoomInFixing((int) ev.getX(), (int) ev.getY());
        lastTouchTime = -1;
      } else {
        // Too slow 
        lastTouchTime = thisTime;
      }
    }
    return super.onInterceptTouchEvent(ev);
  }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <azizbekyan.andranik.map.OnDoubleTap
        android:id="@+id/mapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:enabled="true"
        android:clickable="true"
        android:apiKey="YOUR_API_KEY" />        
</LinearLayout>

android:apiKeyここで値をに置き換えることを忘れないでくださいapiKey

于 2012-09-28T19:49:55.983 に答える
1

古い投稿ですが、この解決策も機能します:ダブルクリック/タップ マップ ズーム (Android)

彼は自分の投稿でエラーを修正したと思うので、答えではなく質問の部分を使用してください(それらは恐ろしいです:))

于 2012-05-04T16:03:45.927 に答える
1

doubleTap イベントを受け取るように GestureListener を実装します。

参照:グリッド レイアウトでの Fling ジェスチャの検出

于 2010-04-22T13:45:07.713 に答える
1

これは、適切で適切な実装です。

Google マップ アクティビティでダブルタップ ズーム

(この質問に無精ひげを生やしたすべての人への遅い答え)

于 2012-03-30T19:10:07.330 に答える
0

誰かが新しい GoogleMap の答えを探している場合 (Google-Play-service:9+ 以降)

case MotionEvent.ACTION_DOWN:
                x1 = m.getX();
                if ((System.currentTimeMillis() - systemTime) < 200) {
                    mGoogleMap.animateCamera(CameraUpdateFactory.zoomIn());
                }
                systemTime = System.currentTimeMillis();
                break;
case MotionEvent.ACTION_UP:
                systemTime = System.currentTimeMillis();
                ...
                break;
于 2017-01-08T17:18:11.620 に答える
0

ズームインおよびズームアウトする場合は、次のコードを使用します

  1. マップビューの上部 50% をダブルクリックして拡大
  2. マップビューの下部 50% をダブルクリックしてズームアウトします

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
      long thisTime = System.currentTimeMillis();

DisplayMetrics metrics = new DisplayMetrics();
WindowManager wm = (WindowManager) activity.getSystemService(activity.getApplicationContext().WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels; 

if (thisTime - lastTouchTime < ViewConfiguration.getDoubleTapTimeout()) {
        // Double tap
         if((height/2)>ev.getY()){
// Zoom IN
            this.getController().zoomInFixing((int) ev.getX(), (int) ev.getY());
        }else{
            this.getController().zoomOutFixing((int) ev.getX(), (int) ev.getY());
//Zoom Out
        }
        lastTouchTime = -1;
      } else {
        // Too slow 
        lastTouchTime = thisTime;
      }
    }
    return super.onInterceptTouchEvent(ev);
  }
于 2013-05-20T03:54:42.377 に答える