Dev/Android

커스텀뷰 CustomView 기초

healthyryu 2018. 3. 21. 23:09

안드로이드 기본 API에서 제공하는 라이브러리의 뷰와는 완전히 다른 뷰를 만들때는 모든 뷰의 최상위 클래스인 View를 상속받아 작성해야 한다.


주의사항

- 레이아웃 XML 파일에 등록하여 다른 뷰와 함께 화면을 구성할 경우 생성자를 하나만 정의하면 실행시 에러가 발생.

- 레이아웃 XML에 등록해서 이용하려면 생성자 3개를 모두 정의해야 한다.


public class MyView extends View {

Context context;

public MyView(Context context) {

super(context);

}

public MyView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public MyView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

}


화면에 무엇인가를 출력하기 위해서는 onDraw() 함수가 필요하다.

@Override

protected void onDraw(Canvas canvas) {

// 출력 관련 구현

}

- 그래픽 프로그램을 작성해서 뷰를 그리기 위한 기본 클래스 Canvans, Paint

- Canvas 기본 함수 : drawPoint(), drawLine(), drawRect(), drawCircle(), drawArc(), drawText(), drawBitmap(), drawRoundRect(), drawOval()

- Paint 기본 함수 : setColor(), setARGB, setAntiAlias(),, setStyle(), setStrokeWidth(), setStrokeCap(), setStrokeJoin()

- 자바코드는 크기 값을 픽셀 단위로만 지정해야한다. 그래서 안드로이드 디바이스 크기에 맞춘 사이즈를 지정하기 위해서 DisplayMetric 객체를 이용해서 디바이스의 크기 정보를 획득한다.

DisplayMetrics dm = getResources().getDisplayMetrics();

int width = (int) (200 * dm.density);


그리고 커스텀 뷰를 레이아웃 XML에 등록할 때는 전체 패키지명으로 등록해야 한다.

<com.tistory.devuryu.MyView

android:layout_width="match_parent"

android:layout_height="match_parent" />


커스텀뷰 내부에서 뷰의 크기를 결정하기 위해서 onMeasure() 함수가 필요하다.

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

setMeasuredDimension(width, height);

}


반응형