問題タブ [motionevent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Multitouch: ACTION_POINTER_DOWN & ACTION_POINTER_UP
I'm trying to use multitouch as a method to press 2 things simultaneously.
Here's my Code:
The problem is that when I touch the screen, the server is retrieving "keydec.down" and "keydec.up" even thought I haven't removed my finger yet from the touchscreen. So the View TouchHandle
is detecting an ACTION_POINTER_DOWN
and ACTION_POINTER_UP
when my finger touches the screen even if I haven't pulled my finger up yet. Any thoughts?
android - タッチ位置座標が互いに影響し合うのはなぜですか? (ACTION_MOVE)
私はここ数時間以来、私が必死に理解しようとしている本当の問題を抱えています. どこにも行きません...
画面上の 2 本の指の正確な位置を処理する必要があるアプリケーションを作成しているときに、(私にとっては) 予期しない動作に遭遇しました。いくつかのデバッグの後、1 本の指を画面上の静止位置に保ち、別の指で同じ画面上をスライドさせると、動いている指だけでなく静止している指の座標も変化することがわかりました。(実生活ではありませんが:D)
y 座標のみのログ出力の例を次に示します。
y(0) は画面の下部に保持された静的な指であり、
y(1) は上から下に移動していました。
画面の下部に到達する前に y(1) が最大の 480 に達したことも興味深いです。
誰かが私にこの振る舞いを説明してもらえますか?
ログを生成するために使用したコードは次のとおりです。おそらく私はばかげた間違いを犯しました...
編集:「htc の欲望」でテストされています。
- 09-11 17:57:09.257: D/TouchHandler(14932): y(0)=480
- 09-11 17:57:09.267: D/TouchHandler(14932): y(0)=480 y(1)=5
- 09-11 17:57:09.287: D/TouchHandler(14932): y(0)=480 y(1)=10
- 09-11 17:57:09.327: D/TouchHandler(14932): y(0)=480 y(1)=30
- 09-11 17:57:09.367: D/TouchHandler(14932): y(0)=480 y(1)=70
- 09-11 17:57:09.427: D/TouchHandler(14932): y(0)=480 y(1)=121
- 09-11 17:57:09.528: D/TouchHandler(14932): y(0)=480 y(1)=206
- 09-11 17:57:09.608: D/TouchHandler(14932): y(0)=480 y(1)=271
- 09-11 17:57:09.618: D/TouchHandler(14932): y(0)=480 y(1)=281
- 09-11 17:57:09.628: D/TouchHandler(14932): y(0)=447 y(1)=293
- 09-11 17:57:09.638: D/TouchHandler(14932): y(0)=447 y(1)=304
- 09-11 17:57:09.658: D/TouchHandler(14932): y(0)=428 y(1)=311
- 09-11 17:57:09.668: D/TouchHandler(14932): y(0)=419 y(1)=317
- 09-11 17:57:09.678: D/TouchHandler(14932): y(0)=415 y(1)=325
- 09-11 17:57:09.688: D/TouchHandler(14932): y(0)=413 y(1)=333
- 09-11 17:57:09.698: D/TouchHandler(14932): y(0)=411 y(1)=351
- 09-11 17:57:09.708: D/TouchHandler(14932): y(0)=411 y(1)=363
- 09-11 17:57:09.718: D/TouchHandler(14932): y(0)=411 y(1)=373
- 09-11 17:57:09.728: D/TouchHandler(14932): y(0)=411 y(1)=383
- 09-11 17:57:09.748: D/TouchHandler(14932): y(0)=480 y(1)=480
- 09-11 17:57:09.758: D/TouchHandler(14932): y(0)=459 y(1)=438
- 09-11 17:57:09.768: D/TouchHandler(14932): y(0)=459 y(1)=432
- 09-11 17:57:09.778: D/TouchHandler(14932): y(0)=445 y(1)=431
- 09-11 17:57:09.788: D/TouchHandler(14932): y(0)=439 y(1)=432
- 09-11 17:57:09.798: D/TouchHandler(14932): y(0)=437 y(1)=436
- 09-11 17:57:09.818: D/TouchHandler(14932): y(0)=439 y(1)=441
- 09-11 17:57:09.828: D/TouchHandler(14932): y(0)=443 y(1)=447
- 09-11 17:57:09.838: D/TouchHandler(14932): y(0)=450 y(1)=456
- 09-11 17:57:09.838: D/TouchHandler(14932): y(0)=459 y(1)=467
- 09-11 17:57:09.858: D/TouchHandler(14932): y(0)=469 y(1)=480
- 09-11 17:57:09.868: D/TouchHandler(14932): y(0)=476 y(1)=480
- 09-11 17:57:09.878: D/TouchHandler(14932): y(0)=479 y(1)=480
- 09-11 17:57:09.888: D/TouchHandler(14932): y(0)=480 y(1)=480
android - getPressureは常に1.0を返します
なぜgetPressure()
いつも返品するのか誰かが知っています1.0
か?
これが私のコードです:
android - 拡大するビューと MotionEvent.getX()/MotionEvent.getRawX()
タイルを展開できるようにする次のコードがあります。しかし、私はこれらのタイルを複数持っており、コードがそれらのすべてに共通である必要があります。
起動時の UI: http://s14.postimage.org/9wn8b2my9/Screenshot_2012_09_14_12_03_14.png
使用するオプションは 2 つあります。
1 つ目は、生の X、Y 値を使用することです。これは、画面上の指の正確な位置を意味します。このようにして、正確な幅、高さ、およびいくつかのポイントまでの距離を簡単に計算できます。1 つの問題は、この値がすべてのタイルで機能しないことです。たとえば、左上のタイルは拡張されず、左下のタイルは必要以上に拡張されます。実際にリッスンしているように見える唯一のタイルは、真ん中のタイルです。
引き延ばしを拒否するタイル: http://s12.postimage.org/ltunmbt7x/Screenshot_2012_09_14_12_03_31.png (タイルが既に最大境界を超えていることをログに記録)
2 番目は、親オブジェクトの位置と比較して X、Y 値を使用しています。これはより簡単な式を生成し、現在私の好みを保持しています. ただし、タイルがたまたま拡張するため、値も拡張されます。タイルの左上隅の値は (0,0) です。その隅を越えると、値は負の値になります。しかし、タイルを再び縮小すると、突然正の値が得られ、すべてが不安定になり、バグが発生し、グリッチが発生します。
このアプリケーションの開発を継続できるように、この厄介なバグを修正するのを手伝ってくれる人がいれば、とてもうれしいです。前もって感謝します!
android - スワイプ中にリストビューの行の背景色を変更する
そのような機能を実装する必要があります。ユーザーがリストビューのアイテムを左にスワイプすると、別のアクティビティが開きます。ユーザーが左にスワイプを開始すると、リストビュー アイテムの背景色は緑になり、スワイプが終了すると、新しいアクティビティが開き、アイテムの背景色が白になります。
スワイプイベントを検出する SwipeDetector クラスがあります。
アクティビティでの使用方法:
しかしmSwipeDetected = Action.None;
、SwipeDetector case MotionEvent.ACTION_UP:
ステートメントの行にコメントを付けると、Activity は適切に開きますが、Activity に戻ると、リストビュー項目の背景色が緑色のままになり Log.i("stop value", "it was stoped");:
、Activityelse if
ステートメントで呼び出すことができません。コメントを外すと、 Log.i("stop value", "it was stoped");
呼び出すことはできますが、リストビュー アイテムの背景色が白のままで、新しいアクティビティが開かれません。どのように実装すればよいですか?
android - onInterceptTouchEvent、onTouchEvent のみ ACTION_DOWN を参照
スワイプを検出したいSliderViewと呼ぶトップレベルのViewGroupがあります。これはほとんど機能していますが、奇妙な失敗が 1 つあります。
SliderView の本質は、onInterceptTouchEvent をオーバーライドし、ユーザーが実際にスワイプしたら「true」を返して、他のビューが MotionEvent を認識しないようにすることです。コードの一部を次に示します。
私の SliderView (最も外側のビュー) は常にonInterceptTouchEvent を受け取る必要があることを理解しています。私のテストの 1 つで、最上位の子は ですが、次のケースではそうではないようです。
最上位の子が ScrollView の場合、onInterceptTouchEvent は ACTION_MOVE を取得し、私のコードは私が望むことを行います。最上位の子が LinearLayout である別のケースでは、時々失敗します。常に ACTION_DOWN を取得しますが、ユーザーが LinearLayout 内のウィジェットに触れた場合にのみ ACTION_MOVE を取得します。空白の領域に触れると、ACTION_DOWN のみが通過します。
失敗した場合のタッチが SliderView の外部で発生しているかのように動作することに注意してください。しかし、その場合、なぜ ACTION_DOWN イベントが発生するのでしょうか?
2 番目の注意: ScrollView のソース コードを見ると、"inChild" をチェックしていることがわかります。それが何のためにあり、どのように関連するのかはわかりません。
java - Android で ACTION_MOVE MotionEvents の合体を避ける
Android のACTION_MOVE
一連の s からデルタを正確に読み取ろうとしていました。MotionEvent
ACTION_DOWN
ただし、画面上で指をスワイプした私のテストでは、最初の の後、いくつかMotionEvent
の がリスナーに配信されないことが示唆されています。十分に大きな移動が行われた後にのみACTION_MOVE
、比較的大きなデルタでイベントが配信されます。この最初のACTION_MOVE
イベントの後、すべてのデルタは再び非常に小さくなります。
または、画面 ( ) に触れてACTION_DOWN
少し動き回っても、ACTION_MOVE
イベントはまったく配信されません。
多くの用途において、特定の動き (鈍感) を持つことが有益であることを理解しています。ACTION_MOVE
ただし、最初の小さな動きがすべて配信されるように、イベントの合体を回避する方法はありますか? ACTION_DOWN
位置と最初の位置の間の最小距離に設定できるしきい値はありACTION_MOVE
ますか?
サンプルコードは次のとおりです。
対応する出力:
つまり、2 行目の大きなデルタ (-16/-9) は避けたいのですが、1 か 2 の順序でデルタを受け取りたいのです...
Samsung Galaxy S2 と Note でテストを行いました。
どんな助けや提案も大歓迎です!
android - Android で MotionEvent.ACTION_UP と画面外への指のドラッグを区別するにはどうすればよいですか?
私のアプリケーションは、端から端までのボタンのグリッドです。すべてのタッチ イベントとモーション イベントをオーバーライドし、動作を手動で制御しています。指が画面外にドラッグされた場合を除いて、すべて正常に機能しています。MotionEvent.ACTION_UP がトリガーされますが、それは望ましくありません。getRawX() と getRawY() を使用して (たとえば、上端と左端の場合) 座標が < 1 であるかどうかを判断しようとしましたが、指をすばやくドラッグすると値が高くなります (20 まで)。ACTION_UP がトリガーされると、場所の値が少し遅れているように見えます。これを回避する方法はありますか?ACTION_CANCEL はまったくトリガーされないようです。
android - Android の ScrollView での MotionEvent 処理
Android の ScrollViews での MotionEvents の動作を理解しようとしてきましたが、理解できないことがあります。
例として、内部に ScrollView があり、ScrollView の内部に LinearLayout があるアクティビティを作成しました。タッチ関連の機能を制御する独自のクラスを実装しました。
画面のどこかをクリックすると、次のログが表示されます。
これは、タッチ イベントがスクロールビュー内の内部レイアウトに到達しなかったことを意味します。ただし、ScrollView を LinearLayout に変更すると (単に extends で変更するだけです)、イベントは内側のレイアウトに移動します。
ScrollView クラスのソース コードを調べたところ、それがオーバーライドする唯一のタッチ関連メソッドは、自分でオーバーライドしたものだけです。したがって、LinearLayout と ScrollView の動作の違いは何なのかわかりません。
android - AndroidMotionEventタッチ位置で奇妙なジャンプ
次のようなコードを使用して、Androidに単純なスクロール可能なギャラリータイプのビューを実装しました。
そしてそれは動作しますが、時々それが突然少し「ジャンプ」することに気づきました。これは、一方の端までスクロールしているときにのみ実際に目立ちます。すでに右端までスクロールしていて、指を常に右に動かすと、1フレーム左にジャンプすることがあります。
上記のログ行を追加して、この出力を取得しました(読みやすくするために編集):
10ピクセルジャンプすることに注意してください!私は指を右にドラッグするだけで、それについてかなり慎重に考えていたことを誓います。最初は、Androidがイベントを順不同で配信しているのではないかと思っていましたが、イベント時間は単調です。
なぜこれが起こっているのか考えていますか?私はそれがサムスンのせいである可能性があると思います(私はギャラクシーS2を持っています)。ドライバーが課すタッチしきい値が遅れているため、入力ドライバーを作成した人は、ドライバーが何をしているのかをはっきりと知りませんでした。それでも、10ピクセルは大きなジャンプのようです。そして時にはそれはさらに大きくなります!