안드로이드 기본 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);
}
'Dev > Android' 카테고리의 다른 글
스크린샷 관련 참고사항 (0) | 2018.04.06 |
---|---|
MediaActionSound() 사용시, 만나는 에러 (0) | 2018.03.23 |
AndroidStudio - fabric 로그 아웃 방법 (0) | 2018.03.21 |
카메라 셔터 소리 켜기 - Camera Sound Turn On (0) | 2018.03.14 |
부모 레이아웃과 자식 레이아웃의 클릭 리스너 트리거 - DuplicateParentState (0) | 2018.03.13 |