2011-09-05 7 views
1

RelativeLayout의 하위 항목을 만들었습니다. 생성자에서 나는라고 : 없음 선이 뷰에 나타나 있지 않은Android : 캔버스에서 그리기 및 비트 맵없이보기

@Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     black.setARGB(255, 0, 0, 0); 
     black.setAntiAlias(true); 
     int halfWidth = this.getWidth()/2; 
     int height = this.getHeight(); 
     canvas.drawLine(0, 0, halfWidth, height, black); 
    } 

:

public CanvasHolder(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     layoutInflater.inflate(R.layout.canvas_holder, this);  
     this.draw(new Canvas()); 
    } 

그리고이 방법의 onDraw()를 재정의합니다. 또한 "this.draw()"를 호출하지 않으려 고했지만 아무 일도 없었습니다.

나는 halfWidth와 height가 0이라는 것을 발견했습니다. 왜?

P. 정적으로 너비와 높이를 설정하더라도 아무 것도 변경되지 않습니다. 괜찮 으면이 샘플 응용 프로그램을 살펴보십시오. 왜 아무 것도 그려지지 않는 이유는 무엇입니까? http://androidforums.com/attachment.php?attachmentid=21715&stc=1&d=1315232946

+0

아마도 레이아웃에서 높이와 너비가 wrap_content로 설정 되었습니까? fill_parent 또는 그와 비슷한 다른 것으로 변경해보십시오. – Joru

+0

아니요, 정적 값 160px 및 220px를 설정했습니다. – QuickNick

+0

새 Canvas()를 호출하기 때문일 수 있습니다. 실제로는 뷰에 연결되어 있지 않습니다. 보기를 그릴 때 SurfaceView 예제를 살펴보십시오. – Joru

답변

0

. 1 매개 변수를 사용하여 생성자가보기를 초기화했습니다. 그런 다음 레이아웃에 사용자 정의보기를 삽입하고 필요할 때 invalidate()를 호출했습니다.

0

onMeasure을 덮어 썼습니까? 여기 내 - 당신은 0 값으로, 때로는이 뷰 동안 몇 번로드 호출되는 것을 알 수 있습니다 : 나는 적지 않은 해결책을 발견했습니다

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

    int parentWidth = MeasureSpec.getSize(widthMeasureSpec); 
    int parentHeight = MeasureSpec.getSize(heightMeasureSpec); 

    if (parentHeight > 0) { 
     this.setMeasuredDimension(parentWidth, parentHeight); 
     // ... other stuff ... 
    } 
} 
+0

죄송합니다. 아무것도 바뀌지 않았다. 10 초 후 activity canvasHolder.draw (new Canvas())를 호출하려고했지만 아무 것도 그려지지 않았습니다. – QuickNick