자체 정의 된 레이아웃, onDraw () 메서드가 호출되지 않음


90

다음과 같은 클래스를 정의했습니다.

public class TestMyFrameLayout extends FrameLayout{

    Paint mPaint;
    public TestMyFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TestMyFrameLayout(Context context) {
        super(context);
        mPaint = new Paint();
        mPaint.setColor(Color.GREEN);
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(50f, 50f, 30, mPaint);
    }   
}

다음과 같이 호출했습니다.

TestMyFrameLayout myFrameLayout = new TestMyFrameLayout(this);
LayoutParams myFrameLayoutParams = new LayoutParams(300,300);
myFrameLayout.setLayoutParams(myFrameLayoutParams);
setContentView(myFrameLayout);

그러나 실제로 TestMyFrameLayout.onDraw (Canvas canvas) 함수가 호출되지 않는 이유는 무엇입니까?


사용하는 코드를 보여줄 수 있습니까? 또한 @OverrideonDraw 앞에 추가 하십시오. 이클립스에서 오타를 확인합니다.
Laurent

3
Laurent 감사합니다. 내 문제는 이미 해결되었습니다. this.setWillNotDraw (false); 추가
old_hou 2011-10-16

답변:


213

해결되었습니다. this.setWillNotDraw(false); 생성자 추가


24
기본적으로 true로 설정 한 개발자 일뿐입니다!
Narcís Calvet 2011

2
이것이 왜 도움이 될까요?
RyanShao

5
ViewGroups의 경우 @RyanShao는 기본적으로 true로 설정됩니다.
ataulm

1
도대체 누군가가 그것이 사실 이길 바라는 이유는 무엇입니까? 왜??
카이 왕

ViewGroup이 그 자체로 그릴 것이없는 순수한 컨테이너 일 때 최적화 된 것 같습니다
hmac
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.