본문 바로가기

개발(Development)/Android(안드로이드)62

[안드로이드] 커스텀 뷰 영역 크기 설정: onMeasure(), setMeasuredDimension() 안드로이드에서 커스텀 뷰를 만들기 위해서는 보통 아래의 작업 과정을 거친다. 1) View 를 상속 받는 커스텀 뷰 클래스를 만들고, 2) onDraw() 메서드를 오버라이드해서 Canvas 객체로 그림를 그린다. 3) 레이아웃 XML파일에 커스텀 뷰를 추가한다. 예를 들어 아래와 같이 커스텀 뷰 클래스를 작성하고 띄워보자. class CustomViewSize: View { // 생성자 constructor(context: Context?) : super(context) constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) // onDraw() 오버라이드: 그림 그리기 override fun onDraw(canvas: .. 2021. 8. 22.
[안드로이드] 원형 프로그레스바 동적으로 조정하는 방법 안드로이드 커스텀 원형 프로그레스바의 진행률을 동적으로 설정하는 방법을 정리한다. 아이디어는 간단하다. 호(Arc)를 그려 원형 프로그레스 바를 만들고, 사용자 이벤트나 진행상황에 따라 호의 각도 값을 조정하는 것이다. 원형 프로그레스바(도넛 그래프) 자체를 만드는 방법은 아래 글을 참고하자. [안드로이드] 커스텀 원형 프로그레스 바(도넛 그래프) 만드는 방법 1. 커스텀뷰(원형 프로그레스바) 코드 1) numProgress 라는 변수를 만들어 그려질 호의 값도값을 관리한다. 2) canvas.drawArc() 메서드 호출시, sweepAngle 매개변수를 numProgress 변수로 설정한다. 3) setPregoress() 메서드를 따로 만들어서, numProgress 값을 업데이트하고, invali.. 2021. 8. 21.
[안드로이드] 원형 프로그레스바 테두리 끝 둥글게 Roound 처리 방법 안드로이드에서 원형 프로그레스바를 만들고, 1. 테두리를 부드럽게하고, 2. 그래프 선 끝부분을 둥글게 처리하는 방법을 정리한다. 안드로이드 도넛 그래프(원형 프로그레스바) 만드는 방법은 아래글을 참고 [안드로이드] 커스텀 원형 프로그레스 바(도넛 그래프) 만드는 방법 # 원형 프로그레스바 디자인 다듬기 원형 프로그레스바의 테두리/가장자리가 부드럽고, 끝부분은 둥글게 Round 처리 해보자. 1. 테두리 부드럽게 처리 Paint객체.isAntiAlias = true * 단, 이 설정은 추가 연산이 필요해서 복잡한 뷰의 경우 성능 이슈가 있을 수 있다고 한다. 2. 그래프 선의 끝 가장자리를 둥글게 처리 Paint객체.strokeCap = Paint.Cap.ROUND class CustomCircleBar.. 2021. 8. 21.
[안드로이드] 커스텀 원형 프로그레스 바(도넛 그래프) 만드는 방법 커스텀 뷰를 이용해 도넛 그래프 형태의 원형 프로그레스바를 만들어 본다. 커스텀 뷰 기초는 아래 글을 참고하자. [안드로이드 코틀린] View 출력 원리와 커스텀뷰 생성/사용 방법 기초 [안드로이드 코틀린] 커스텀 View 전용 속성 정의 및 사용 방법: attr.xml [안드로이드 코틀린] 커스텀 View 화면 갱신 방법(새로 그리기): invalidate() # 원형 프로그레스바 생성 방법 1. 바탕이 되는 360도의 호를 그려준다. 2. 진행률을 표시할 호를 다른색으로 그려준다. class CustomCircleBarView: View { // 생성자 constructor(context: Context?) : super(context) constructor(context: Context?, attr.. 2021. 8. 21.
[안드로이드 코틀린] 커스텀 뷰에 터치 이벤트 리스너 등록 방법 안드로이드에서 코틀린으로 커스텀뷰를 만들고, 이벤트 리스너를 등록하는 방법은 아주 간단하다. 단, 이 글은 커스텀뷰의 기초를 안다는 전제하에 작성되었다. 커스텀뷰 사용 방법은 아래 글을 참고하자. [안드로이드 코틀린] View 출력 원리와 커스텀뷰 생성/사용 방법 기초 [안드로이드 코틀린] 커스텀 View 전용 속성 정의 및 사용 방법: attr.xml [안드로이드 코틀린] 커스텀 View 화면 갱신 방법(새로 그리기): invalidate() # 커스텀 뷰에 터치이벤트 리스너 설정 방법 1. 커스텀뷰 클래스 생성 2. onTouchEvent() 메서드 정의 - View 클래스에 정의된 onTouchEvent() 메서드는 뷰에 터치이벤트가 발생할 때마다 콜백된다. - onTouchEvent() 메서드를 .. 2021. 8. 20.
[안드로이드 코틀린] 커스텀 View 전용 속성 정의 및 사용 방법: attr.xml 커스텀 뷰의 기초 사용 방법은 아래 글 참고 [안드로이드 코틀린] View 출력 원리와 커스텀뷰 생성/사용 방법 기초 커스텀 뷰를 사용할 때, 커스텀 뷰를 위한 속성을 정의하여 사용해야할 때가 있다. 방법은 간단하다. 1. attr.xml 파일에 커스텀 속성을 정의해두고, 2. 커스텀 뷰 클래스에서 attr.xml 파일에 정의한 속성을 참조하여 뷰에 적용하도록 설정하고, 3. 레이아웃 XML 파일에서 를 등록하면서 attr.xml 에 정의한 속성을 사용하면 된다. # 커스텀 속성 정의 방법 1. res > values 경로에 attrs.xml 파일을 생성 2. 태그 생성 - name 항목에는 커스텀뷰 클래스명을 입력해준다. 3. 태그 생성 - name에는 속성명, format에는 속성의 타입을 정의해준다.. 2021. 8. 20.
[안드로이드 코틀린] View 출력 원리와 커스텀뷰 생성/사용 방법 기초 # 안드로이드 View 출력 원리 안드로이드 시스템은 XML에 정의된 View 태그와 속성을 기반으로 생성된 View 객체와 AttributeSet 객체를 이용해 화면에 View 를 그려준다. 좀더 풀어 쓰면, 레이아웃 XML에 정의된 모든 View 들은 화면에 출력 될 시점에 안드로이드에 의해 View 객체로 변환되어 메모리에 올라가며, 이 때, 각 뷰의 내부 속성(색상, 크기 등)은 AttributeSet 객체로 변환되어 View 클래스 생성자의 매개변수로 전달 된다. 이렇게 생성된 View객체를 안드로이드가 해석하여 화면에 그려준다. 참고로 XML 에 정의된 View 를 객체로 생성해 메모리에 올리는 과정을 Inflate 라고 한다. (경우에 따라 코드상에서 개발자가 직접 이 작업을 수행하기도 한다.. 2021. 8. 20.
[안드로이드 코틀린] 커스텀 View 화면 갱신 방법(새로 그리기): invalidate() 안드로이드에서 커스텀 뷰를 만들 때, 특정 주기마다 View를 갱신하여 다시 그려야 할 때가 있다. 특히 이벤트 발생 시, 커스텀 뷰의 애니메이션 등을 구현할 때가 많다. 방법은 커스텀 뷰를 다시 그려야 할 때마다, View 클래스에 정의된 invalidate() 메서드를 호출하는 것이다. # View.invalidate() 메서드 View클래스에 정의된 Invalidate() 메서드를 호출하면, 해당 뷰 화면이 무효(invalid)임을 안드로이드에게 알리게 되고, 안드로이드는 현재의 뷰 상태를 반영하여 새로 화면을 그려준다. View를 상속 받는 커스텀 뷰 클래스를 생성한 다음, 커스텀뷰를 다시 그려야 할 때마다 Invalidate() 메서드를 호출하도록 구현해주면 된다. 아래에 간단한 예제 코드를 작.. 2021. 8. 20.
[안드로이드 코틀린] 코드에서 View 크기 dp 설정 방법: dimens.xml 안드로이드 "코드" 상에서 뷰의 사이즈는 Float, Int 등의 px로만 설정 가능하며 dp와 같은 단위를 주기가 힘들다. 이럴 때는 dimens.xml 파일을 만들어 사이즈 값을 저장해두고, 코드에서 불러와 사용하면 된다. 1. dimens.xml 파일 정의 - res > values 경로에 dimens.xml 파일 생성 - 태그 내부에 태그를 삽입 2. Kotlin 코드에서 참조 - 이렇게 해두면 코드 상에서 사이즈를 불러와서 사용할 수 있다. - resources.getDimension(R.dimen.이름) // dimens.xml 에 정의한 크기값 참조 val fontSizeLarge: Float = resources.getDimension(R.dimen.font_size_large) val f.. 2021. 8. 20.