2016-05-25 15 views
1

ボタンを長押しして文字ストリームを送信する方法。ここ は、私は、ユーザーがボタンを離すまで、ボタンの長押しで、文字のストリームを送信するボタンのLongClick、ボタンを長く押して文字ストリームを送信する方法

btnDown.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      sendMessage("S");//Here I wanted to send for example SSSSS on long press of that button 
     } 
    }); 

のためのコードです。

+1

のように使用し、あなたのsendMessageコード書くのか? –

+0

私はボタンを持っています。ボタンをクリックすると、私はこのアクションを実行する必要があります。 – Archana

+0

ボタンにタッチリスナーを簡単に追加できます。 http://stackoverflow.com/questions/11779082/listener-for-pressing-and-releasing-a-button –

答えて

0

使用setOnTouchListenerとACTION_DOWNには

+0

私は、左、右、下、上のような4つのボタンがあります。 'LongClickListeners'を使う方法がありますか? – Archana

2

はカスタムListner

String mString=""; 

public class ContinousRepeatListener implements View.OnTouchListener { 

private Handler handler = new Handler(); 

private int initialInterval; 
private final int normalInterval; 
private final View.OnClickListener clickListener; 

private Runnable handlerRunnable = new Runnable() { 
    @Override 
    public void run() { 
     handler.postDelayed(this, normalInterval); 
     clickListener.onClick(downView); 
    } 
}; 

private View downView; 

/** 
* @param initialInterval The interval after first click event 
* @param normalInterval The interval after second and subsequent click 
*  events 
* @param clickListener The OnClickListener, that will be called 
*  periodically 
*/ 
public ContinousRepeatListener (int initialInterval, int normalInterval, 
     View.OnClickListener clickListener) { 
    if (clickListener == null) 
     throw new IllegalArgumentException("null runnable"); 
    if (initialInterval < 0 || normalInterval < 0) 
     throw new IllegalArgumentException("negative interval"); 

    this.initialInterval = initialInterval; 
    this.normalInterval = normalInterval; 
    this.clickListener = clickListener; 
} 

public boolean onTouch(View view, MotionEvent motionEvent) { 
    switch (motionEvent.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     handler.removeCallbacks(handlerRunnable); 
     handler.postDelayed(handlerRunnable, initialInterval); 
     downView = view; 
     downView.setPressed(true); 
     clickListener.onClick(view); 
     return true; 
    case MotionEvent.ACTION_UP: 
    case MotionEvent.ACTION_CANCEL: 
     handler.removeCallbacks(handlerRunnable); 
     downView.setPressed(false); 
     downView = null; 
     return true; 
    } 

    return false; 
} 

} 

を行い、次のように試してみて、あなたがダウンしてアクションをタッチアップを検討なかったこの

btnDown.setOnTouchListener(new ContinousRepeatListener(400, 100, new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // the code to execute repeatedly 
      mString += "S"; 
      tvString.setText(mString); 
     } 
    })); 
+0

文字列の長さが736になるたびに、長いクリックは発生していません。キーボードのキーと同じようにボタンを機能させたい – Archana

+0

@Archana私の更新された回答を表示 –

関連する問題