1

シークバーからメソッドを呼び出して値を設定しようとしています。

メソッド getProgress() を呼び出すと、アプリがクラッシュします。

Viewを拡張するアクティビティでやっています。

シークバーの値は MainActivity で設定されます。

public class Draw extends View 
{
    public Draw(Context context) 
    {
        super(context);
    }

    Paint prop = new Paint();
    Random color = new Random();

    SeekBar bar = (SeekBar) findViewById(R.id.skbContrast);
    int value = bar.getProgress();// it crashes here

    @Override
    protected void onDraw(Canvas canvas) 
    {
        super.onDraw(canvas);

        int width = getWidth();
        int height = getHeight();

        int oriwidth = 0;
        int oriheight = 0;      

        for (int x = 0; x < 20; x++) 
        {
            int red = color.nextInt(value);
            int green = color.nextInt(value);
            int blue = color.nextInt(value);

            prop.setARGB(255, red, green, blue);
            canvas.drawRect(oriwidth += 10, oriheight += 10, width -= 10, height -= 10, prop);
        }
    }
}

何か助けはありますか?ありがとう、そして英語でごめんなさい。

4

1 に答える 1

1
SeekBar bar = (SeekBar) findViewById(R.id.skbContrast);

ビューで参照しようとすると、null が返されます。

むしろ、次のアプローチを取る必要があります。

以下のステートメントをアクティビティに移動します。

SeekBar bar = (SeekBar) findViewById(R.id.skbContrast);
int value = bar.getProgress();

ビュー クラスにメソッドを作成します。

public void setSeekBarValue(long seekBarValue)
{
   this.seekBarValue=seekBarValue;
}

また、値をビューに渡したいときはいつでも MainActivity から、次のスニペットに書き込みます。

SeekBar bar = (SeekBar) findViewById(R.id.skbContrast);
int value = bar.getProgress();
viewObject.setSeekBarValue(value);

これは完全な解決策ではなく、開始を支援するためのアイデアです。

于 2013-09-26T19:06:16.667 に答える