1

a を使用しSeekBarて 2 つの情報を示しようとしています。

  1. ユーザーが設定できるオーディオ録音のしきい値。
  2. ユーザーが設定できない着信音声レベル。

ユーザーのタッチ入力を使用して、目的のしきい値を示すScrollBarを変更したいと思います。SeekBarプログレス カラー バーは、ScrollBar位置に関係なくオーディオ レベルを表示するようにプログラムで設定され、ユーザー入力の影響を受けません。

と を使用してみましSeekBar.setScrollX(int)SeekBar.setScrollY(int)が、ドキュメントによると、これらの呼び出しはビューを無効にし、実際にこれらの関数のいずれかが呼び出されるとプログラムがクラッシュします。

touchEvent コードは次のとおりです。

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (!isEnabled()) {
        return false;
    }

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_MOVE:
        case MotionEvent.ACTION_UP:
            setProgress(getMax() - (int) (getMax() * event.getY() / getHeight()));
            setScrollX(50); // this causes a MethodNotFoundError
            onSizeChanged(getWidth(), getHeight(), 0, 0);                
            break;

        case MotionEvent.ACTION_CANCEL:
            break;
    }
    return true;
}

これが私が使用している onScrollChanged 関数の簡単なテストです。これがオーバーライドされていない場合でも、NoSuchMethodFoundError が発生することに注意してください。

@Override
public void onScrollChanged(int x, int y, int x1, int y1) {
    super.onScrollChanged(0, 0, 0, 0);
}
4

0 に答える 0