Androidは許可なく振動HapticFeedback(振動フィードバック)をトリガーする可能性があります

この記事は、HarryWeasleyによって公開することを許可されています。

HarryWeasleyのブログアドレス:

http://blog.csdn.net/harryweasley

Androidでコントロールを長押しするときは、振動を使用してユーザーに通知する必要があります。Vibrateクラスを使用するだけでなく、(HapticFeedback)振動フィードバックの実装を使用することもできます。

このブログでは、Androidの振動フィードバックについて理解しましょう。まず、電話の振動モードをオンにします。ここでは、Xiaomi電話を使用してシミュレーションを行っています。場所は、次のように、[設定]-> [音と振動]-> [触れたときに振動する]にあります。写真は示す:

Androidは許可なく振動HapticFeedback(振動フィードバック)をトリガーする可能性があります
振動をよりはっきりさせるために、より強い振動強度を選択しました。

1システムが振動をトリガー

このブログを例から始めて、長押しを登録してボタンを聞いてみましょう。

Androidは許可なく振動HapticFeedback(振動フィードバック)をトリガーする可能性があります

このボタンを長押しすると、トーストがポップアップして振動しますが、falseを返しても振動は発生しません。
次に、ソースコード分析を見てください。これはなぜですか。

ボタンは、親クラスTextViewの親クラスViewにsetOnLongClickListenerメソッドを実装します。

View.setOnLongClickListenerソースコード:

Androidは許可なく振動HapticFeedback(振動フィードバック)をトリガーする可能性があります
mOnLongClickListenerがインターフェイスのonLongClickメソッドを呼び出す場所を確認し、最後にViewソースコードで見つける必要があります。

View.performLongClickソースコード:

Androidは許可なく振動HapticFeedback(振動フィードバック)をトリガーする可能性があります

13行目でonLongClickメソッドが実行され、処理された変数に戻り値が与えられていることが
わかります。18行目では、hangdledがtrueで、performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)が実行され、このメソッドが最終的に振動フィードバックをトリガーします。

これが、onLongClickがtrueを返すと、振動効果が発生する理由です。

2カスタムトリガー振動

前のセクションで述べたように、振動はperformHapticFeedbackでトリガーされます。ソースコードを観察すると、ユーザーがコードを介してトリガーできることがわかります。

以下に示すように、クリックすると振動フィードバックもトリガーされます。

Androidは許可なく振動HapticFeedback(振動フィードバック)をトリガーする可能性があります
それでは、performHapticFeedbackソースコードに移動して、何が実行されたかを確認しましょう。

View.performHapticFeedbackソースコード:

Androidは許可なく振動HapticFeedback(振動フィードバック)をトリガーする可能性があります

ここに3つの知識ポイントがあります:

1.振動は、isHapticFeedbackEnabled()がtrueの場合にのみトリガーされます。後で、それが偽であるときに振動が引き起こされない理由を説明します。

xmlでは、android:hapticFeedbackEnabled =” false | true”で設定できます。

Javaコードでは、view.setHapticFeedbackEnabled(boolean)、によって設定できます。

ただし、デフォルトはtrueです。

2. HapticFeedbackConstants定数値。3つを使用する必要があります。1つはLONG​​_PRESS(長押し)、2つ目はFLAG_IGNORE_VIEW_SETTING(ビューの設定の影響を受けない、つまりisHapticFeedbackEnabled()の影響を受けない)、3つ目はFLAG_IGNORE_GLOBAL_SETTING(システム設定の影響を受けません。つまり、振動フィードバックがオンになっているかどうかの影響を受けません)

3.メソッドが最終的にperformHapticFeedback(int FeedbackConstant、int flags)メソッドを返すことがわかります。

View.performHapticFeedback(intfeedbackConstant、intflags)ソース码:

Androidは許可なく振動HapticFeedback(振動フィードバック)をトリガーする可能性があります
15行目のifステートメントを見てください。flags= 0、flags&HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTINGが0、isHapticFeedbackEnabled()がfalseの場合、条件全体がtrueであるため、17行目が実行されて直接返されます。これが、performHapticFeedback(intfeedbackConstant)メソッドがisHapticFeedbackEnabled()がtrueの場合にのみ振動をトリガーする必要がある理由です。
ここでそれについて話すと、&はビット単位のANDであり、値を返し、&&は論理的にはブール値を返します。
19〜20行目は、基礎となる振動をトリガーするコードであり、その後はコードは分析されません。

3HapticFeedbackConstants常量

次に、以下に示すように、HapticFeedbackConstantsの3つの定数、または前のコードを確認します。

Androidは許可なく振動HapticFeedback(振動フィードバック)をトリガーする可能性があります
クリックすると振動が発生しますが、xmlにandroid:hapticFeedbackEnabled =” false”という文が追加されている場合、クリックしても振動の影響はありません。次のように:

<Button
    android:layout_width="wrap_content"
    android:id="@+id/click"
    android:layout_height="wrap_content"
    android:hapticFeedbackEnabled="false"
    android:text="make" />

この時点で振動させたい場合は、次のように行うことができます。

Androidは許可なく振動HapticFeedback(振動フィードバック)をトリガーする可能性があります

ビューのプロパティ設定を無視します。

この記事の前に、設定でタッチスイッチの振動をオンにするように言ったことを思い出してください。実際、ユーザーはオンにせずに振動させることができます。次の方法を使用するだけです。

Androidは許可なく振動HapticFeedback(振動フィードバック)をトリガーする可能性があります

システム設定を無視してください、ハハ、それは変な方法ですが、お勧めできません。結局のところ、ユーザーはタッチフィードバックを禁止しているので、ユーザーの制限に挑戦し続ける必要はありません。

最後に、上記の方法は、振動権限、振動権限、振動権限を必要としないということです。重要なことは3回言われています。

あなたがあなたと共有したい良い記事を持っているなら、あなたはそれを提出することを歓迎します、そしてあなたは私に記事のリンクを直接提出することができます。

写真を押し続けることを歓迎します->写真のQRコードを特定するか、スキャンして私の公式アカウントに従ってください:

Androidは許可なく振動HapticFeedback(振動フィードバック)をトリガーする可能性があります
オリジナルを読む

おすすめ

転載: blog.51cto.com/15064646/2575344