TextView
0 のような数値を表示する があり、 があるとしますButton
。ユーザーがボタンを押すと、TextView の数値が 1 増加します (これは方法を知っています) が、ユーザーがボタンを押して離さない場合は、数値をTextView
増やして、これを繰り返す必要があります。ユーザーがButton
. 言い換えれば、ユーザーがボタンを押している間、数値を何度も増やす方法は?
質問する
2671 次
3 に答える
6
一般的なアプローチ (Android に固有ではない) は、プレス イベントとリリース イベントを別々に検出することです。プレスイベントは、カウンターに追加する周期的なタスク (Runnable
またはThread
) を開始します (1 秒間に 5 回、または 200 ミリ秒ごとに 1 回としましょう)。リリース イベントは定期的なタスクを停止します。
于 2012-04-03T22:08:04.137 に答える
2
イベントを受け取ったら非同期の繰り返しイベントをスケジュールし、mousePressed
イベントを受け取ったら停止する必要がありますmouseReleased
。
Java でこれを処理する方法はたくさんあります。私java.util.concurrent
は非常に柔軟なクラスを使用するのが好きです。ただし、次の点に注意してください。
イベント ディスパッチ スレッドで非同期イベントが発生しない場合は、JButton
を使用してテキストを設定する必要がありますSwingUtilities.invokeLater()
。
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Frame
{
public static void main( String[] args )
{
JFrame frame = new JFrame( );
final JButton button = new JButton( "0" );
final ScheduledExecutorService executor = Executors.newScheduledThreadPool( 1 );
button.addMouseListener( new MouseAdapter( )
{
int counter = 0;
ScheduledFuture<?> future;
@Override
public void mousePressed( MouseEvent e )
{
Runnable runnable = new Runnable( )
{
public void run( )
{
SwingUtilities.invokeLater( new Runnable( )
{
public void run( )
{
button.setText( String.valueOf( counter++ ) );
}
} );
}
};
future = executor.scheduleAtFixedRate( runnable, 0, 200, TimeUnit.MILLISECONDS );
}
@Override
public void mouseReleased( MouseEvent e )
{
if ( future != null )
{
future.cancel( true );
}
}
} );
frame.add( button );
frame.setSize( 400, 400 );
frame.setVisible( true );
}
}
于 2012-04-03T22:23:20.267 に答える
1
View.OnLongClickListener
ボタンに を設定する- アクティビティに を
Runnable
指定し、アクティビティをロードするときに初期化します (ただし、開始しないでください)。 - OnLongClickListener に、テキスト ボックスを更新し、最初にクリックされてからの時間を確認する通常の非同期タスクを実行させます。
- タッチ イベントが発生し
OnTouchListener
たときに を一時停止する を作成します。Runnable
これが大まかなドラフトであることは承知していますが、これは再利用および変更できる非常に便利なパターンであるため、タロンを沈めておく価値があります...
于 2012-04-03T22:15:16.940 に答える