티스토리 뷰

여태까지 실습을 하면서 사용한 Layout들과 위젯들은 안드로이드 프레임워크에서

기본적으로 제공하는 라이브러리 였습니다.

 

이것 말고도 개발자가 직접 View 클래스를 상속받아 만들 수 있는데

이것을 커스텀뷰(CustomView)라고 합니다

지금까지 액티비티에 레이아웃을 그려준 방법은 java 파일에서

setcontentView(.xml) 이런식으로 불러와서 그려주었습니다.

하지만 커스텀 뷰를 사용하면 이런 방식이 아니라

java 파일에서 View를 상속받아 만든 파생클래스를 setcontentView(.java)로 불러와서 그려주게됩니다.

이 커스텀 뷰를 이용해서 점, 선, 면, 원을 만들어보겠습니다.

MainActivity.java에서 이제 setContentView에 xml을 불러오지 않습니다.

//MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState)
   CustomView customView = new CustomView(this);
   setContentView(customView); // customView : 직접 만든 파생 클래스
}
//CustomView.java
public class CustomView extends View {

    public CustomView(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        //super.onDraw(canvas);
        canvas.drawColor(Color.WHITE);

        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        canvas.drawRect(150,10,250,150, paint);
        
        paint.setColor(Color.RED);
        canvas.drawPoint(110, 110, paint);

        paint.setColor(Color.GRAY);
        canvas.drawLine(50,50,100,100,paint);
        
        paint.setColor(Color.BLUE);
        canvas.drawCircle(200,200,70,paint);
    }
}

이 클래스는 View 클래스를 상속받아서 만들었습니다.

 

protected void onDraw(Canvas canvas)

이 함수는 다른 Activity에서 setContentView로 커스텀 뷰를 불러올 때 자동으로 실행되는 메소드입니다.

 

canvas.drawRect(150,10,250,150, paint);

네모 그리기. 네모의 좌상단 좌표가 (150, 10) 이고 우하단 좌표가 (250, 150) 입니다.

 

canvas.drawPoint(110, 110, paint);

점 그리기. (110(x),110(y))

 

canvas.drawLine(50,50,100,100,paint);

선 그리기 (50, 50) -> (100, 100) 으로 그리기

 

canvas.drawCircle(x좌표,y좌표,반지름, paint);

원그리기

 

좌표를 조금 조정해서 그린 커스텀 뷰이다.

점은 워낙 작아서 안보이고 선도 너무 얇다..

선을 두껍게 출력하는 방법이 따로 있나 궁금증이 생기고

두껍게가 되지 않는다면 Rect를 얇게해서 쓰는 방법밖에 없을까 라는 생각도 든다.

 

이런 커스텀 뷰를 이용해서 만들 수 있는 기능은

내가 집에서부터 다닌 곳을 GPS 수신으로 내 좌표를 찍어 점이나 LINE을 그리는 기능을 만들 때 사용이 된다.

 

이상으로 커스텀 뷰에 대해 글을 마치겠습니다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함