まず前置きとして
boolean型がtrueかfalseを判別するということはわかります。
そして、私が作りたいboolean型も恐らくできています。
私自信voidとint(数字の判別)のみで大抵のプログラムはできると、考えていまして‥
ここまでも0と1でbooleanみたいなことをやってきました(上記の作りたいboolean型とは別ですが)。
で、ですね‥なんか見辛いし!ダサいなーと最近思うようになりまして、boolean使おうとなった次第であります。
今までこういうモノだと深く考えず使っていたタッチイベントですが、よく考えたらよくわからないなと‥
本題です。
タッチイベントのbooleanの仕組み?流れ?について簡単にご説明できると有難いです。
今回は単純に
MOTION_UP
MOTION_DOWN
そして
return false;
の場合でお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
タッチイベントだとかMOTION_UPだとかMOTION_DOWNだとか書かれていますが、これはonTouchEvent()
のことでしょうか?
(もしそうであれば、MOTION_UP・MOTION_DOWNではなく、ACTION_UP・ACTION_DOWNが正しいです)
そう判断して以下を書きましたので、もし違っていたらすいません。
あと、若干の憶測が入っているかもしれないので、ご注意ください。
https://techbooster.org/android/application/715/
以上のサイトによれば、
返り値をtrueに設定すると「TouchEventを消化」したことになり、他のViewやActivityへの通知を抑制できます。
とのことです。
これだけ聞くと難しそうですが、AndroidのシステムがonTouchEvent()
を呼び出して処理をしているだけです。
「あるメソッドを呼び出し、その返り値が0だったらああする、1だったらこうする」という処理を書いたことがあると思いますが、それをシステム内部が行っているだけです。
また、ACTION_UP・ACTION_DOWNですが、タッチ押下するとACTION_DOWNが、指を持ち上げるとACTION_UPが、引数を通じて送られてきます。
こちらは、「Aというボタンを押したらfoo(0)を、Bというボタンを押したらfoo(1)を呼び出す」というイメージになります。
このACTION_UP・ACTION_DOWNは、boolean型とは直接関係ないです(ACTION_UP・ACTION_DOWNはboolean型ではありません)。
追記:
以上のような感じで答えてみたけど、どちらかというとboolean型というよりかは、onTouchEvent()
の仕組みについて書いているようなような気がしてきました…。
初歩的なことですが、boolean型は単純な値なので、trueが1、falseが0だと思っておけば間違いないと思います。
そのため、boolean型そのものには仕組みも何もありません。
追記2:
基本的には、swordoneさんの回答の通りです。
swordoneさんが言っているメソッドとは、ここではonTouchEvent()
のことです。
onTouchEvent()
のreturnがtrueであれば、他のonTouchEvent()
は実行されないということです(すでに実行されたものは除く)。
私が記載したサイトによれば、以下のような優先順位になっています。
上位のView>下位のView>Activity
これについてですが、例えば以下のようなソースがあるとします。
(上位レイヤーのView)
Java
1public class AEventView extends View { 2 @Override 3 public boolean onTouchEvent(MotionEvent event) { 4 // 何か処理 5 6 return false; 7 } 8}
(下位レイヤーのView)
Java
1public class BEventView extends View { 2 @Override 3 public boolean onTouchEvent(MotionEvent event) { 4 // 何か処理 5 6 return true; 7 } 8}
(Activity)
Java
1public class CEventActivity extends Activity { 2 @Override 3 public boolean onTouchEvent(MotionEvent event) { 4 // 何か処理 5 6 return false; 7 } 8}
この状態では、全てreturn false;
であれば 上位レイヤーのView→下位レイヤーのView→Activityの順番で呼ばれます。
しかし、下位レイヤーのViewではreturn true;
となっているので、ActivityのonTouchEvent()
が呼ばれなくなります。
同様に、上位レイヤーのViewがreturn true;
となっている場合は、下位レイヤーのViewとActivityのonTouchEvent()
が呼ばれなくなります。
投稿2017/09/30 13:28
編集2017/10/01 01:22総合スコア10152
0
ベストアンサー
タッチに反応するイベントが同時に複数発生することもあります。
その時、何らかの優先順位によってイベントが順番に処理されていきます。
例えば、ある点をタッチしたことにより、A,B,Cの3つのイベントが発生したとします。
まずAを処理します。このイベントを処理するメソッドがfalseを返せば、処理が続行されます。
次にBを処理します。このイベントメソッドがtrueを返した場合、「ここでイベント終わり」を意味し、続くCのイベントを処理せずに終わらせることができます。
投稿2017/09/30 18:06
総合スコア20669
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/01 01:59
退会済みユーザー
2017/10/01 04:16
2017/10/01 04:42
退会済みユーザー
2017/10/01 05:22
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/09/30 17:54
2017/10/01 01:24
退会済みユーザー
2017/10/01 02:01
2017/10/01 02:24
退会済みユーザー
2017/10/01 05:32