1

タッチ入力するだけで色を選べるカラーピッカーを作ろうとしています。私のhueShadeはカラーサークルに色相を与え、saturationShadeは中心からのホワイティングを与えます。SweepGradientには半径は必要ありませんが、RadialGradientには半径が必要です。ただし、幅と高さの実際の値を取得できない場合は、作成時にこれを呼び出しています。代わりに、指定された値を取得します。その情報が利用可能になったときに半径を設定できる中間ステップはありますか?または、別のアプローチを試す必要がありますか?

private Paint mPaint;
private int[] mColors;

private int viewWidth = 120;
private int viewHeight = 120;
private int centerX = 60;
private int centerY = 60;
private int padding = 10;

public ColorWheelView(Context context) {
    super(context);
    onInitialize();
    // TODO Auto-generated constructor stub
}


private void onInitialize()
{

    mColors = new int[] {
            0xFFFF0000, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFF00FF00,
            0xFFFFFF00, 0xFFFF0000
        };

        Shader totalShade = new SweepGradient(0, 0, mColors, null);
        Shader hueShade = new SweepGradient(0, 0, mColors, null);
        Shader saturationShade = new RadialGradient(0, 0, (float)viewWidth-padding, 0xFFFFFFFF, 0x00FFFFFF, Shader.TileMode.CLAMP);
        //Shader valueShade;

        totalShade = new ComposeShader(hueShade, saturationShade, PorterDuff.Mode.SCREEN);

        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setShader(totalShade);
        mPaint.setStyle(Paint.Style.FILL);
}

protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) 
{
    super.onSizeChanged(xNew, yNew, xOld, yOld);
    viewWidth = xNew;
    viewHeight = yNew;
    centerX = viewWidth / 2;
    centerY = viewHeight / 2;
}

protected void onLayout(boolean changed, int left, int top, int right, int bottom)
{
    super.onLayout(changed, left, top, right, bottom);
    viewWidth = right - left;
    viewHeight = bottom - top;
    centerX = viewWidth / 2;
    centerY = viewHeight / 2;
}

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int measuredHeight = measureHeight(heightMeasureSpec);
    int measuredWidth = measureWidth(widthMeasureSpec);
    setMeasuredDimension(measuredWidth, measuredHeight);
}

私が何を達成しているのかを理解するのに役立つ場合は、このビューをさまざまなサイズの画面で使用できるようにしようとしています。そのため、デバイスからの情報が必要です。

4

1 に答える 1

0

これは、通常、サイズや向きの変更が行われたときに保証されるため、onLayout で呼び出すのが最適です。以前は目的の値が得られませんでしたが、それは Android.view.View クラス以外の基本クラスから継承したためです。

于 2012-06-07T20:35:24.927 に答える