일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- Build variants
- sharedFlow
- Flow
- Authentication
- MVVM
- 커스텀뷰
- 리사이클러뷰
- XML
- NavController
- 파이어베이스
- UiState
- NavHost
- cleanarchitecture
- ListAdapter
- 코틀린
- Compose
- 로그인
- 컴포즈
- DiffUtil
- 회원가입
- coroutine
- Jetpack
- 클린아키텍처
- 코딩테스트
- Kotlin
- 뷰
- 플레이스토어
- Android
- 알고리즘
- 안드로이드
- Today
- Total
목록커스텀뷰 (5)
Grusie 안드로이드 개발 기술 블로그
지난 번 만들었던 이미지 크롭 리스트들을, 리사이클러뷰에 DiffUtil을 활용하여 넣도록 구현하였다.베스트 컷, 퍼니 컷이라는 속성을 가진 이 아이템들을 각각 수정하거나 삭제할 수 있는 기능을 구현했어야 했다.우선 기존에 크롭 이미지는 뷰페이저로 만들어 각 프래그먼트에서 이미지를 크롭하고 캐시 디렉토리에 저장한 뒤, ActivityViewModels로 뷰모델을 공유해서 Activity에서 Intent시켜줄 때, Uri리스트를 전달하도록 구현하였다. 디자인우선 만들어야하는 뷰를 확인해보자, 넘어온 크롭 이미지 리스트를 화면에 뿌려주고, 베스트컷/퍼니컷을 선택 할 수 있도록 구현해야 하고, 햄버거 버튼을 클릭 하면 편집/삭제가 가능하도록 해야한다.편집하기/삭제하기는 popup으로 만들어서 화면에 띄워주는 ..
이미지 크롭 기능을 구현해야 할 일이 있었다.라이브러리를 사용하려고 이곳 저곳 둘러봤으나, 원하는 디자인을 전부 만족시킬 만한 라이브러리가 보이지 않았다.만약 있다고 하더라도, 언젠가 고치기 위해선 뷰는 가능하면 라이브러리를 사용하지 않는 것이 좋겠다는 생각이 들어 직접 만들게 되었다. 커스텀 뷰class ImageCropView(context: Context, attrs: AttributeSet) : ConstraintLayout(context, attrs) { private var bitmap: Bitmap? = null private var cropRect: RectF = RectF(100f, 100f, 400f, 400f) private var lastTouchX: Float = ..
이미지에 관한 코드들을 구경하다가, 화면에 이미지를 원하는 위치에 원하는 크기, 회전에 따라서 보여주고 싶을 때가 있었다.직접 구현해 본 적이 없어서, 라이브러리가 어딘가에 있지 않을까 했었는데, 커스텀 뷰로 만든 것을 보고 흥미로워서 분석한 내용을 작성해 보려고 한다. 생성자class CustomRotateImageView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, private val imageInfo: ImageVo = ImageVo(),) : FrameLayout(context, attrs) {}우선 커스텀 뷰이기에, 생성자를 만들고, xml layout에서 사용한다면, AttributeSet..
디자인을 받아 뷰를 그리던 중, GridLayout을 가진 RecyclerView를 구현해야 했던 상황이었다.이전에도 이런 적이 있었기에, ItemDecoration을 사용하였으나, 또 다시 찾아보게 되어서 정리를 해두려고 한다. 이번에 그릴 뷰는 사이에 7dp라는 마진이 있고, spanCount가 2인 그리드 뷰이다.바깥쪽엔 14dp가 아닌, 20dp가 있기에 innerMargin과 outerMargin을 따로 받아 처리하도록한다. 로직1. 맨 처음 column일 경우는, 왼쪽에 outerMargin / 2, 오른쪽에 innerMargin2. 마지막 column일 경우는, 왼쪽에 innerMargin / 2, 오른쪽에 outerMargin3. 나머지 column들은 양쪽에 innerMargin / 2 ..
정사각형 뷰를 정해진 갯수만큼 그리디하게 뿌려주는 것을 구현하면서 생긴 고민이다.기존에는 정사각형 뷰가 필요했을 때는 커스텀 레이아웃을 만들어서 구현하였다.물론 이 방법이 나쁘다는 것은 아니지만, 뷰는 가능한 xml 상에서 다 할 수 있었으면 좋겠다고 생각하였기에, 고민하던 중 constraintDimensionRatio 속성을 찾게 되었다. 기존 커스텀뷰class SquareLayout : ConstraintLayout { constructor(context: Context?) : super(context!!) {} constructor(context: Context?, attrs: AttributeSet?) : super( context!!, attrs ) { } ..