목록Android (63)
시배's Android
Hi Jack Mocker란? GitHub - koreatlwls/Hi-Jack-Mocker: Hi-Jack-Mocker is a project that leverages OkHttp3's interceptor to intercept and modify netHi-Jack-Mocker is a project that leverages OkHttp3's interceptor to intercept and modify network requests and responses, allowing you to verify the UI easily. - koreatlwls/Hi-Jack-Mockergithub.com Hi Jack Mocker는 비개발자도 UI 엣지 케이스를 쉽게 테스트할 수 있도록 돕는 라이브러리입..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dPSxUw/btsH8LtawnK/tF7WpWzR9lsVmlopSM23RK/img.png)
Hi Jack Mocker란? GitHub - koreatlwls/Hi-Jack-Mocker: Hi-Jack-Mocker is a project that leverages OkHttp3's interceptor to intercept and modify netHi-Jack-Mocker is a project that leverages OkHttp3's interceptor to intercept and modify network requests and responses, allowing you to verify the UI easily. - koreatlwls/Hi-Jack-Mockergithub.comHi Jack Mocker는 비개발자도 UI 엣지 케이스를 쉽게 테스트할 수 있도록 돕는 라이브러리입니..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/eosdx9/btsHZWPHMNn/9R0OkGqfOk0DrkUyZ4V9r0/img.gif)
문제 TiTi에는 사용자가 자신의 공부 시간을 확인할 수 있는 TimeTable 기능이 있습니다. 어느 날 우연히 Layout Inspector를 사용하던 중, TimeTable에서 지속적으로 Recomposition 발생하고 있다는 사실을 발견했습니다.문제의 원인@Composablefun TdsTimeTable( modifier: Modifier = Modifier, timeTableData: List, colors: List,) { var hour by remember { mutableStateOf("0") } var fontSize by remember { mutableStateOf(7.sp) } val textStyle = Tds..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bqdMNn/btsGfz1twfH/JKFTUbKwtEHOPWdDzGkiHK/img.gif)
문제 Timer TiTi를 개발하며 겪었던 흥미로운 이슈와 그 해결 과정을 공유하려 합니다. 개발 과정 중 데이터는 정상적으로 업데이트되었지만, 특정 그래프가 화면에 표시되지 않는 문제에 직면했습니다. 문제의 원인 @Composable private fun TdsPieChart( modifier: Modifier = Modifier, taskData: List, colors: List, progress: Float, containsDonut: Boolean, totalTimeString: String?, ) { var startAngle = 270f val density = LocalDensity.current BoxWithConstraints( modifier = modifier, contentAlig..
TiTi Side Project | Composable 함수를 Bitmap으로 변환하기 Timer TiTi 프로젝트에서는 Card를 이미지로 변환하여 갤러리에 저장하거나 인스타그램에 공유하는 기능을 추가하려고 합니다. 이를 위해서는 Composable 함수로 구현된 View를 Bitmap으로 변환하는 로직 si8ae.tistory.com 갤러리 저장 먼저, 비트맵 객체를 PNG 포맷의 이미지 파일로 저장하는 과정을 살펴봅시다. 이를 위해 저는 먼저 저장할 파일의 위치와 이름을 정의해야 합니다. 여기서는 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)를 사용하여 공용 사진 디렉토리에 파일을 저장하고, 파일 이름은 "..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mWUfR/btsFOXi9vYL/ItbVVb24KtR5R41qknNDgK/img.png)
Timer TiTi 프로젝트에서는 Card를 이미지로 변환하여 갤러리에 저장하거나 인스타그램에 공유하는 기능을 추가하려고 합니다. 이를 위해서는 Composable 함수로 구현된 View를 Bitmap으로 변환하는 로직이 필요합니다. fun Modifier.createCaptureImageModifier(picture: Picture): Modifier = this.drawWithCache { val width = this.size.width.toInt() val height = this.size.height.toInt() onDrawWithContent { val pictureCanvas = Canvas( picture.beginRecording( width, height, ), ) draw(this,..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bpuInQ/btsEFQRT86X/PIl6hKdKPSal6sQfBWV2YK/img.png)
위 사진을 보면 TiTi 프로젝트에서 TimeTable의 격자가 제대로 그려지지 않는 상황이 발생하고 있습니다. Compose의 Preview에서는 잘 나오지만 실제 runtime에서는 위와 같이 이슈가 발생하고 있습니다. fun DrawScope.drawGrid() { val itemWidth = size.width / 7 val itemHeight = size.height / 24 var startX = 0f var startY = 0f repeat(7 * 24) { idx -> drawRect( color = Color(0x80626262), topLeft = Offset( x = startX, y = startY, ), size = Size(itemWidth, itemHeight), style =..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cmkwKG/btsEydMNJmu/EI3tWKKiFbwBh3ndQVWoPK/img.png)
TdsTimeTable은 TiTI 프로젝트에서 사용되는 커스텀한 컴포넌트입니다. 이 컴포넌트는 사용자가 진행한 task에 대한 시간을 한눈에 파악할 수 있도록 도와주며, 각 시간대별로 진행한 task를 시각적으로 표현합니다. Canvas( modifier = modifier .drawWithContent { drawContent() drawGrid() }, ) { fun DrawScope.drawGrid() { val itemWidth = size.width / 7 val itemHeight = size.height / 24 var startX = 0f var startY = 0f repeat(7 * 24) { idx -> drawRect( color = Color(0x80626262), topLeft ..