プロフィール


Live!Ads

カテゴリ

iPad (2)

スポンサー


検索(サイト内)

全タイトルを表示


最近の記事

最近のコメント

最近のトラックバック

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



【--/--/-- --:--】 スポンサー広告| tb(-) cm(-)

[Android]MapView.setOnTouchListener を処理したら地図を動かせなくなった!

GoogleMap って何もしなくてもスクロールできるのになんでそんな事すんの?ってツッコミはしないで下さい(汗
スクロールとか拡大とか、とりあえずタッチされたら XXX って処理を書きたかっただけなんです。

MapView.setOnTouchListener を実装したら、ドラッグでスクロールできなくなったどころか、BuiltInZoomControl も操作できなくなった、つまりタッチ操作が何もできなくなっちゃったよ、という話。

(実はついさっきまで「できない」って思ってて「できませんでした」って記事にするつもりだったけど、ふと気づいて解決できたので「できました」って記事になりましたw)



最初に書いたコード:
MapView mapview = (MapView)findViewById(R.id.mapView);
mapview.setBuiltInZoomControls(true);

mapview.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});

これだと、なんにもできない。

次に書いたコード:
MapView mapview = (MapView)findViewById(R.id.mapView);
mapview.setBuiltInZoomControls(true);

mapview.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});

これだとちゃんと動いた。

onTouch で true を返すと何もできなくなり、false を返すと普通に動く。
onTouch の返り値の意味って何?って調べたら次のように書いてある。

"True if the listener has consumed the event, false otherwise."
このリスナでイベントを取るなら true を返しなさい、それ以外は false を返しなさい。

どうやら true を返すと、それ以降のコントロールに処理が行き届かなくなるようですな。

no-op なメソッドだと何も考えずに true を返してしまいがちなんだけど、注意しなきゃいかんですね。
「とりあえず true 返しとけ」ってのはダメですよ!
スポンサーサイト
【2010/11/09 01:02】 Android| tb(0) cm(1)
タグ : Android
<<せーいぞーんせんりゃくー | ホーム | [GIS]FOSS4G 2010 in Tokyo( #foss4gj )に参加してきました>>
コメント
このコメントは管理人のみ閲覧できます
【2012/03/29 15:46】 | #[ 編集]
コメントの投稿

管理者にだけ表示を許可する

トラックバック
トラックバックURL
http://oku2006.blog43.fc2.com/tb.php/1617-cc902069
| ホーム |
アクセスランキング
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。