MapViewのドラッグによるスクロールの無効化

709 views
Skip to first unread message

Takashi

unread,
Jul 8, 2010, 10:30:41 PM7/8/10
to 日本Androidの会
Takashiと申します。

ひとつ行き詰まりがありましたのでご質問をさせて頂きます。

現在MapView上にOverlayクラスを用いて表示させたアイコンを
ドラッグして地図上を移動させるということを考えております。

ところが問題がありオーバーレイ元のMapViewも同様にドラッグ移動
されてしまいます。

これをMapViewをドラッグ移動を無効化してアイコンのみ移動させる
ということを行ないたいのですが、MapViewのドラッグ無効の方法
がわかりませんでした。

何か方法がわかる方がいらっしゃいましたらお教え頂けないでしょうか?
よろしくお願い致します。

Takashi

unread,
Jul 8, 2010, 11:13:28 PM7/8/10
to 日本Androidの会
とりあえず今までの調査報告を致します。

MapViewにsetClickable(false);
にてMapViewのスクロールを無効になることを確認しました。

‥がドラッグイベントを拾うonTouchEventが機能しなくなり
表示させたアイコンをドラッグ位置に表示することが出来ません。

何か他の方法があれば良いのですが‥

あんざいゆき

unread,
Jul 9, 2010, 12:28:02 AM7/9/10
to android-g...@googlegroups.com
あんざいです。

 試してないので、予想ですが、
 MapView は View を継承しているので、
 Methods inherited from class android.view.View
 のなかのsetScrollContainer はどうでしょうか?


2010年7月9日12:13 Takashi <k-c...@qf7.so-net.ne.jp>:
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。




--
あんざい ゆき
anzai...@gmail.com
twitter : @yanzm

伊藤 靖

unread,
Jul 9, 2010, 1:27:48 AM7/9/10
to 日本Androidの会
参考までに、mapを移動させる場合と、マーカーを移動させる場合を
分けてみてはいかがですか?
こんな感じでいけそうな気がしますが。。。
間違っていたらごめんなさいね。

private boolean curDown;
private boolean mapDrag;
@Override
public boolean onMotionEvent(MotionEvent event) {
int action = event.getAction();
if(action == MotionEvent.ACTION_DOWN){
curDown = true;
}else if(action == MotionEvent.ACTION_UP){
curDown = false;
}else if(curDown && action == MotionEvent.ACTION_MOVE){
if(mapDrag){
//そのまま、マップのドラッグ処理を行わせる。
return true;
}else{
//マーカーのドラッグ処理を書く
return false;
}
}
return true;
}


On 7月9日, 午後1:28, あんざいゆき <anzai.y...@gmail.com> wrote:
> あんざいです。
>
> 試してないので、予想ですが、
> MapView は View を継承しているので、http://code.google.com/intl/ja/android/add-ons/google-apis/reference/...
> Methods inherited from class android.view.View
> のなかのsetScrollContainer はどうでしょうか?http://developer.android.com/intl/ja/reference/android/view/View.html...)
>
> 2010年7月9日12:13 Takashi <k-ch...@qf7.so-net.ne.jp>:
>
>
>
>
>
> > とりあえず今までの調査報告を致します。
>
> > MapViewにsetClickable(false);
> > にてMapViewのスクロールを無効になることを確認しました。
>
> > ‥がドラッグイベントを拾うonTouchEventが機能しなくなり
> > 表示させたアイコンをドラッグ位置に表示することが出来ません。
>
> > 何か他の方法があれば良いのですが‥
>
> > On 7月9日, 午前11:30, Takashi <k-ch...@qf7.so-net.ne.jp> wrote:
> > > Takashiと申します。
>
> > > ひとつ行き詰まりがありましたのでご質問をさせて頂きます。
>
> > > 現在MapView上にOverlayクラスを用いて表示させたアイコンを
> > > ドラッグして地図上を移動させるということを考えております。
>
> > > ところが問題がありオーバーレイ元のMapViewも同様にドラッグ移動
> > > されてしまいます。
>
> > > これをMapViewをドラッグ移動を無効化してアイコンのみ移動させる
> > > ということを行ないたいのですが、MapViewのドラッグ無効の方法
> > > がわかりませんでした。
>
> > > 何か方法がわかる方がいらっしゃいましたらお教え頂けないでしょうか?
> > > よろしくお願い致します。
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-group-j...@googlegroups.com<android-gro-up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>
> --
> あんざい ゆき
> anzai.y...@gmail.com
> twitter : @yanzm- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

Takashi

unread,
Jul 9, 2010, 1:54:37 AM7/9/10
to 日本Androidの会
あんざいさん

情報ありがとうございます。

ただ今以下のように設定して試してみましたが
状況は変わらずでした。

mapView.setScrollContainer(false);

MapViewの他色々と~Scroll~というメソッドも
使用してみましたが、やはり駄目そうでした。

MapViewのスクロールは特別なものなのかも
知れませんね。。

On 7月9日, 午後1:28, あんざいゆき <anzai.y...@gmail.com> wrote:
> あんざいです。
>
> 試してないので、予想ですが、
> MapView は View を継承しているので、http://code.google.com/intl/ja/android/add-ons/google-apis/reference/...
> Methods inherited from class android.view.View
> のなかのsetScrollContainer はどうでしょうか?http://developer.android.com/intl/ja/reference/android/view/View.html...)
>
> 2010年7月9日12:13 Takashi <k-ch...@qf7.so-net.ne.jp>:
>
>
>
> > とりあえず今までの調査報告を致します。
>
> > MapViewにsetClickable(false);
> > にてMapViewのスクロールを無効になることを確認しました。
>
> > ‥がドラッグイベントを拾うonTouchEventが機能しなくなり
> > 表示させたアイコンをドラッグ位置に表示することが出来ません。
>
> > 何か他の方法があれば良いのですが‥
>
> > On 7月9日, 午前11:30, Takashi <k-ch...@qf7.so-net.ne.jp> wrote:
> > > Takashiと申します。
>
> > > ひとつ行き詰まりがありましたのでご質問をさせて頂きます。
>
> > > 現在MapView上にOverlayクラスを用いて表示させたアイコンを
> > > ドラッグして地図上を移動させるということを考えております。
>
> > > ところが問題がありオーバーレイ元のMapViewも同様にドラッグ移動
> > > されてしまいます。
>
> > > これをMapViewをドラッグ移動を無効化してアイコンのみ移動させる
> > > ということを行ないたいのですが、MapViewのドラッグ無効の方法
> > > がわかりませんでした。
>
> > > 何か方法がわかる方がいらっしゃいましたらお教え頂けないでしょうか?
> > > よろしくお願い致します。
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-group-j...@googlegroups.com<android-group-japan%2Bunsu...@googlegroups.com>にメールを送信してください。

Takashi

unread,
Jul 9, 2010, 3:32:26 AM7/9/10
to 日本Androidの会
伊藤様

ご教授ありがとうございます。

伊藤様のソースをヒントに少し改良を加えてみまして実装できました。
画面長押しを検知してその状態でドラッグするとアイコンが指の位置
drawPointAddressに描画します。onTouchEventの中でsetCenter
で画面タッチ時の中心座標に設定していますが、これは不要でした。
super.onTouchEvent(event, mapView);を実行せずにtrueを返せば
MapViewのスクロールは行なわれないことがわかりました。


class MapDraw extends Overlay implements
GestureDetector.OnGestureListener{

  …
  @Override
  public boolean onTouchEvent(MotionEvent event, MapView mapView){

  gesture.onTouchEvent(event);

  if(event.getAction() == MotionEvent.ACTION_DOWN){
  }
  else if(event.getAction() == MotionEvent.ACTION_MOVE){
  if(longPressFlg == true){
  touchCenterPoint = mapView.getMapCenter();
  drawPointAddress =
mapView.getProjection().fromPixels((int)event.getX(),
(int)event.getY());
  mapView.invalidate();
  }
  }
  else if(event.getAction() == MotionEvent.ACTION_UP){
  longPressFlg = false;
  touchCenterPoint = null;
  }

  if(touchCenterPoint != null){
  mapController.setCenter(touchPoint);
  return true;
  }

  return super.onTouchEvent(event, mapView);
  }

  @Override
  public void onLongPress(MotionEvent e) {
  longPressFlg = true;
  }
}

大変参考になりました。また何かありましたらよろしくお願い致します。

伊藤 靖

unread,
Jul 9, 2010, 5:54:42 AM7/9/10
to 日本Androidの会
そうですか。
それはよかったですね!

少しだけ役に立ちましたかw

その後になんですが、マーカーをMAPの表示枠外にドラッグした状態で
引っ張っていくと、マップがスクロールするなんてことすると、
拍手!!!ですねw
> > > > このグループから退会するには、android-group-j...@googlegroups.com<android-gro--up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > > > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>
> > > --
> > > あんざい ゆき
> > > anzai.y...@gmail.com
> > > twitter : @yanzm- 引用テキストを表示しない -
>
> > > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
Reply all
Reply to author
Forward
0 new messages