0

OnLongClickListener から適切に振動させる方法を誰かが説明してくれるかもしれません。以下の方法では、振動は非常に短いです。return false;期待どおり5000msの間振動が続くように設定すると、しかしOnClickListener発射されます。

OnLongClickListener から全期間振動し、発火しないようにするにはどうすればよいOnClickListenerですか?

final Vibrator x = (Vibrator) getParent()
            .getSystemService(Context.VIBRATOR_SERVICE);
button.setOnLongClickListener(new OnLongClickListener() {
        @Override
    public boolean onLongClick(View v) {
        x.vibrate(5000);
        return true;
    } 
}); 
4

2 に答える 2

0

バイブレーションの間実行するようにタイマーを設定し、タイムアウトになったときにのみ True を返すことができます。少しあいまいですが、うまくいくはずです。

于 2013-03-12T14:52:01.757 に答える
0

クリック イベントがトリガーされると、利用可能な最下位のハンドラーに渡されます (誰かが中断しない限り)。あなたの場合、長いクリックイベントが最初にに渡されますOnLongClickListener。そのリスナーが を返した場合true、基本的に、このクリック イベントが処理されたことを通知します。が返さfalseれた場合、クリックイベントが処理されなかったことを通知します。そのため、イベントは階層内で 1 レベル上のハンドラー (この場合はOnClickListener.

false長いクリックイベントを処理したいので、戻るのは道ではないのはそのためです。

バックグラウンド スレッドまたはASyncTaskバイブレーション自体の作成についてはどうですか。何かのようなもの:

@Override
public boolean onLongClick(View v) {
    getHandler().post(new Runnable() {

        @Override
        public void run() {
            x.vibrate(5000);           
        }

    });
    return true;
} 

コードをテストしませんでしたが、問題ないはずです。

于 2013-03-12T15:03:53.210 に答える