ボタン押下時にボタンの画像を変えて画面を遷移する方法

ちょっといい方法が思いつかず、スマートじゃない方法を書いておきます。

とりあえずonTouchListenerで画像の切り替えは簡単にできます。

ImageButtonのSwitcherを作った|旧かみぴーぶろぐ

で、気持ち悪いのがここから。

このMotionEvent.ACTION_UPの処理部分にIntentを使って画面を遷移させようとすると、ボタンを押したままボタンが存在しないところまでMotionEvent.ACTION_MOVEさせてからMotionEvent.ACTION_UPさせても画面が遷移してしまうのです。

説明が難しいね、うん

Webっぽい話をすると、Aタグリンクをクリックしたまま(ドラッグ)どこかに移動して離す(ドロップ)すると画面は遷移しないですよね?それをAndroidアプリで再現したいんです。

単純に考えてフラグで管理しようとするとすごく中途ハンバな実装になってしまうので、僕はOnTouchListenerでは画像の変更だけ行って、画面遷移はOnClickListenerで行うことにしました。これだと簡単な上、上記のWebっぽい動作をしてくれます。

本当はもっとシンプルなやり方があったりすると思うので、簡単に出来る方法があったら誰か教えてください(´・ω・`)

onTouchListenerだけでやる場合は、MotionEvent.ACTION_MOVEをしたときのx,yが今のViewの上に乗ってるかどうかを判定して外れたら画面を遷移させないようにすれば出来そうな気がしますが面倒だなと..

追記

onTouchの return は false にしないとOnClickListenerが動かない(´Д`)

また追記

もしかしたらOnClickListenerを動かす場合はFocusがあたってる必要がある?

以下でViewにFocusをあてれるのでうまくOnClickListenerが動かない場合は試してみるといいかも

view.requestFocus();

ハードウェアキーで操作出来るようにFocus系をいじってたら動かなくなったのでメモ

[Android]Viewのフォーカスとトラバース