問題タブ [ontouch]

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.

0 投票する
1 に答える
353 参照

android - Android PointerID を理解する。予期しない値を返す

最近アプリのクラッシュ レポートを受け取り、スタック トレースを確認したところ、マルチタッチ コントロールに問題があることがわかりました。

何が起こるかは次のようなものです:

4本の指だけの指押しを記録しようとしています。もういや。4 を超えるものはすべて効果的に「無視」したいと考えています。

したがって、私は次のようなことをしています:

したがって、4 本以上の指が押されている場合、onTouch 内で何も実行していません。

これは正常に動作しているようです。通常、指 5、6 などには「作用」しません。すべて問題ありません。(以下の理由で「一般的に」と言います).....

問題

ただし、6 本の指を下に置いてから持ち上げると、最後に下に置いた指のポインター ID は 5 になります。 action_upまたはaction_pointer_upで何もしていないため、これは実際には問題ではありません。

ただし、 action_pointer_downでは、90% の確率で、置かれた指が 0 から 3 の間の ID しか持たないという予想される動作が得られます。

ただし、画面に 5 本以上の指を置き、画面をすばやく何度もタップすると、最終的には 4 つ以上のaction_pointer_downイベントに ID が割り当てられます (4、5、6、7 を見たことがあります)。したがって、これらの値を xList および yList 配列に配置しようとすると、範囲外の例外でクラッシュします。

action_pointer_down では、指の x と y を作成したいくつかの配列に保存しているため、これは問題です。(後でいくつかのアクションを実行するためにこの情報が必要です) これらの配列のサイズはそれぞれ 4 です (インデックス 0 から 3 になります)。このような:

どうしてこれなの?これはマルチタッチ API のバグですか、それとも私が理解していないものですか。通常の使用では、エラーは通常発生しませんが、自分で簡単にトリガーでき、ユーザーが見つけたので、助けていただければ幸いです。フィンガー ダウン イベントは、0 ~ 3 の ID しか受信しないと予想されます。私が何かを誤解していない限り。

0 投票する
0 に答える
152 参照

android - onTouch メソッドで ListView の CustomView のサイズを変更する (setLayoutParams が機能しない)

カスタム BaseAdapter で埋められた ListView があります。カスタム BaseAdapter の getView メソッドは、RelativeLayout を拡張するカスタム ビューのみを返します。

ここで、ListView 項目に触れるたびに、この項目の高さが TouchEvent の Y 位置 (または他の何かに設定されますが、それは問題ではありません) に設定されるようにしたいと考えています。

そこで、カスタム ビューで OnTouchListener を設定しています。

だからすべてが大丈夫です。私のログでは、たくさんの数字が減っています。しかし、setLayoutParams-method (これは必要です) を呼び出したいとすぐに、onTouch-method は、画面を離して再タッチしたときに 1 回だけ呼び出されるようです。ログとカスタム ビューのサイズも 1 回だけ変更されます。

その理由は何ですか?

0 投票する
1 に答える
267 参照

android - 最後に残っている指の座標を取得する - Android マルチタッチ

私が直面している問題は、ACTION_POINTER_UP が起動されたときに、最後に残っている指の座標を取得する必要があることです。

この例を見てください (2 つのポインタを使用):

  • 親指を画面 (ID0) に置きます
  • 人差し指を画面に置く (ID1)
  • 画面から親指を離します (ID0)
  • 残りのポインターは人差し指 (ID1)
  • 人差し指のグラブ座標(ID1)

さて、私の ACTION_POINTER_UP ケースには、次のものがあります。

明らかに、これはあまり役に立たないので (私が理解できる限り)、これは画面を離れたポインターの x と y を記録しますが、これは私が必要としているものではありません。

上記の例では 2 つのポインターのみを使用していますが、同じ質問を 3 つ、4 つ、または 5 つのポインターに適用できます。

  • 親指を画面上に配置 (ID0)
  • 画面上に人差し指を置く (ID1)
  • 画面に中指を置く (ID2)
  • 画面に薬指を置く (ID3)
  • 画面から親指を離します (ID0)
  • 画面に触れた残りのポインターの最新の x と y を取得します

Android の公式ドキュメントやブログにはリンクしないでください。何度も読みましたが、どうすればこれを達成できるのか、まだよくわかりません。また、ポインタ ID についての私の理解が間違っている場合は、訂正してください。

0 投票する
3 に答える
500 参照

android - Android - カスタム ビューの onTouch メソッドから mainActivity に情報を送信します。

一連のアクションを実行する onTouch メソッドを持つカスタム ビュー (DrawFigures) があります。カスタム ビューを動的に追加するためのいくつかのボタン、TextView および RelativeView を含むレイアウトがあります。次に、MainActivity.class で、このカスタム ビューで onTouch メソッドが呼び出されたときに、DrawFigures のいくつかの属性の値を受け取り、それらを TextView コンポーネントに表示する必要があります。

カスタム ビューのコードは次のとおりです。

DrawFigures の onTouch メソッドが原因で、値が変化している間、MainActivity の TextView に表示する value1 を受け取ることができませんでした。この問題はどのように解決できますか? MianActivity に OnTouch メソッドを実装しますか? どうやってするの?MainActivity.class は次のようになります。

0 投票する
3 に答える
1343 参照

android - Android: キークリック音の作り方

キーアップ イベントとキーダウン イベントをキャッチするために ontouch リスナーを使用しています。リピート機能に。ボタンを押したときのクリック音も欲しいです。onClick メソッドを追加して、クリック可能な true を設定しようとしましたが、ontouchlistener が onclicklistener をオーバーライドしているようです。

キークリック音を鳴らし、クリック時のユーザー設定に従うにはどうすればよいですか?

更新: ありがとうございました。私の答えは、Android ソースを調べて見つけました。PhoneWindow.java で、必要なことを実行している場所を見つけました。本質的には、オーディオ マネージャーを開いて、AudioManager.FX_KEY_CLICK を再生します。AudioManager.playSoundEffect は、適切な場合に効果音のみを再生します。

0 投票する
1 に答える
2953 参照

android - Android の onTouch および onTouchEvent メソッド

「onTouch」メソッドで以下のように書きました。

しかし、「getPointerCount()」と「getAction()」は常に同じ値を吐き出します。

このコードはマルチタッチを認識できません。

また、MotionEvent.ACTION_UP の発生時に onTouch メソッドは呼び出されません。

だから、私は onTouchEvent メソッドで同じことを試しましたが、これはうまくいきます。

「onTouch」メソッドの問題は何ですか?