2012-09-09 2 views
1

"보기"를 하위 클래스 화하여 내 자신의보기를 만들려고 시도하고 있습니다. onDraw로 그려지는 새로운 Button 유형 클래스를 시뮬레이트하고 싶습니다. 캔버스에서 사각형을 그려서 전달하는 곳입니다. 레이아웃 XML 파일에 사용자 정의 View를 추가했지만 크기를 제어 할 수 없습니다. 예를 들어 너비를 "fill_parent"로 설정하고 높이를 "wrap_content"로 설정했지만 내 View의 내용이 무엇인지 알 수 없습니다. (BTW, 내보기에있는 LinearLayout "세로"지향)Android 사용자 정의보기 크기 조정

누구 내보기의 크기를 제어하는 ​​방법에 몇 가지 포인터를 줄 수 있습니까? 예를 들어 내 사용자 정의보기에서 XML 파일에 설정된 매개 변수를 어떻게 알 수 있습니까?

+0

나는 당신이 무엇을 요구하는지 정확히 모르겠습니다. XML 매개 변수는 모든 기본보기에 대해 동일한 동작 인'View '에 대한 생성자로 전달됩니다. 정확히 무엇이 명확 해 지길 원합니까? – Eric

+0

오! 그것은 속성 매개 변수입니까? 그래서 지금 저는 onDraw에서 간단한 캔버스 드로잉 작업을하고, 아주 작은 점을 그립니다. XML 파일에서 layout_height를 "wrap_content"로 보았고 전체 화면을 채워 다른 뷰를위한 공간을 남기지 않았습니다. 그렇다면 내 사용자 정의보기를 제어하여 점 주위를 "감싸는"방법은 무엇입니까? – Matthew

답변

1

Android에서 Canvas의 콘텐츠를 감지 할 수 없으므로 내용이 0x0 인 것으로 간주합니다. 당신이 찾고있는 것을 할

, 당신은 onLayout 또는onMeasure (onLayout 대신 아이를 배치하는 방법으로 안드로이드 개발자에 의해 지정됩니다) 오버라이드 (override)합니다. 또한 콘텐츠의 크기를 계산하는 방법이 필요합니다.

먼저 Point mSize = new Point(0, 0);이라는 멤버 변수로 시작하십시오.onDraw 이외의 방법 인 에서 자주 호출되지만이 크기를 내용의 크기로 바꾸는 것이 좋습니다. 반지름이 25 인 원을 그릴 경우 다음을 수행하십시오. mSize.x = 50; mSize.y = 50;.

다음은 this answer (onMeasure)입니다. 부모의 크기 (이 경우 2로 나눈 값)를 기준으로 항목의 크기를 설정하는 방법을 보여줍니다. 그런 다음 mSize.xmSize.y에서 크기를 가져 와서 해당 크기를 적용 할 수 있습니다.

마지막으로 mSize을 측정 한 후에 invalidate()을 호출하면 View을 다시 강제 실행하고 새 매개 변수를 조정해야합니다. 이것은 내가이 점에서 확신 할 수없는 부분입니다.

주의 : Canvas 콘텐츠의 크기를 계산하면 고정 너비와 높이를 사용하여 setLayoutParams을 호출 할 수도 있습니다. 그러나 성능에 영향을 미칠지는 확실하지 않습니다.

관련 문제