9

ユーザーがクリックしたときにイベントをトリガーするために、シークバーのサムにクリック可能なイベントを登録したいと思います。出来ますか?

4

4 に答える 4

3

zwebie と Nermeens の回答を適切な解決策に組み合わせる:

seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    private int mProgressAtStartTracking;
    private final int SENSITIVITY;

    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
        // handle progress change
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        mProgressAtStartTracking = seekBar.getProgress();
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        if(Math.abs(mProgressAtStartTracking - seekBar.getProgress()) <= SENSITIVITY){
            // react to thumb click
        }
    }
});

したがって、これは実際には親指の移動ではなく、シークバーの他の部分のクリックではなく、親指のクリックでのみ発生します。

感度を調整することができます。これは、クリックによって親指がすでに少し動いている場合があり、クリックしながら小さな変更を許可することでイライラが軽減される場合があるためです。ここでの適切な値は、シークバーのサイズと最大値によって異なります。私にとっては、縦向きレイアウトで最大50の全幅シークバーで3がうまく機能しました。

于 2016-08-24T12:55:14.377 に答える
1

私は次の方法でこれを達成することができました:

seekBar.setOnTouchListener(new OnTouchListener() 
{
    @Override
    public boolean onTouch(View v, MotionEvent event) 
    {
        if(event.getAction() == MotionEvent.ACTION_MOVE)
        {
            changedPosition = true;
            seekBar.setProgress(seekBar.getProgress());
            return false;
        }
        else if (event.getAction() == MotionEvent.ACTION_UP)
        {
            if(!changedPosition)
            {
                  //do action here
            }
        }
   }

お役に立てれば

于 2012-08-14T11:33:51.133 に答える
0

私はこのようにします:

pagesSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { //listener
        @Override
        public void onStopTrackingTouch(final SeekBar seekBar) {
            //add your event here
        }

        @Override
        public void onStartTrackingTouch(final SeekBar seekBar) {
        }

        @Override
        public void onProgressChanged(final SeekBar seekBar, final int progress, final boolean fromUser) {
                updateControls(progress, false);
        }
    });
于 2012-07-27T08:52:26.940 に答える