2012-04-01 2 views
1

사용자가 터치 입력만으로 색상을 선택할 수있는 색상 선택 도구를 만들려고합니다. SaturationShade가 나에게 가운데에서 whiting을주는 동안 내 색조 쉐이드는 색상환에 색조를 제공합니다. SweepGradient에는 반경이 필요하지 않지만 Radial Gradient에는 반경이 필요합니다. 그러나, 나는 창조의 시간에 폭과 높이의 실제 값을 얻을 수 없을 때 이것을 부른다. 대신 명시된 값을 선택합니다. 해당 정보를 사용할 수있을 때 반경을 설정할 수있는 중간 단계가 있습니까? 아니면 다른 방법을 시도해야합니까?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); 
} 

내가 달성하려는 것을 파악하는 데 도움이된다면이보기를 다양한 크기의 화면에 사용할 수 있도록하려고합니다. 그래서 장치에서 정보가 필요합니다.

+0

문제가 해결되었습니다. onStart()가 호출 될 때 호출 된 또 다른 함수를 제공합니다. – Arzeimuth

답변

0

크기 또는 방향의 변경이 수행 될 때 일반적으로 보장되므로 onLayout에서 이것을 호출하는 것이 가장 좋습니다. 이전에 원하는 값을 얻지 못했지만, Android.view.View 클래스 이외의 기본 클래스에서 상속했기 때문입니다.