web-dev-qa-db-ja.com

Android seekbarドラッグをブロックする方法/短時間無効にする方法

値がtrueの場合、シークバーのドラッグをブロックしたいと思います。これも可能ですか?シークバーをスイッチとして使用しています。シークバーの値が0の場合、ボタンを押すとアクションAが開始されます。シークバーの値が1で、ボタンを押すと、アクションBが開始されます。
アクションAまたはBが実行されている場合、シークバーが別の位置にドラッグされるのを防ぎたい。

どうすればこれを達成できますか?

19
Leandros

独自のonTouchListenerを設定し、trueを返す必要があります。

seekBar.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                return true;
            }
        });
63
Maxim Tulupov

1つのクラスレベル変数を設定する

private boolean blockSeekBar = false;

その後、要件に応じてblockSeekBar変数を設定し、アプリで使用します。

seekBar.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            return blockSeekbar;
        }
    });

setEnabled(true/false) 選択肢もありますが、ビューが適切に表示されないため、上記のコードが完全に機能しているのはそのためです。

1
Yogesh Rathi
int lastProgress=0;
  1. Seekbar.OnSeekbarChangeListenerが起動されたときの最後の進行状況を追跡します。

    private SeekBar.OnSeekBarChangeListener mOnSeekbarChangeListener = new 
    
    SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
        if (fromUser) {
            if (true) {
                seekbar.setProgress(lastProgress);
            } else {
                seekbar.setProgress(progress);
            }
        }
    }
    
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        lastProgress = seekBar.getProgress();
    }
    
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
    
    }
    };
    
0
user3832276