https://medium.com/@kappdev/how-to-create-a-stunning-3d-border-in-jetpack-compose-e040fbb6b8de
요즘 다양하고 화려한 UI를 어떻게하면 안드로이드에서 그릴 수 있을까 관심이 많았는데, 이사람의 글에 관련된 정보가 많아서 좋다.
이렇게 된 테두리를 그린다.

먼저 그림자부분을 만들 수 있는 함수를 만들고,

offset을 +로 준 것과 -로 준 것을 합쳐서 shadow와 glare를 준다.

https://medium.com/@m.abuzaid.ali/how-to-create-custom-annotations-in-kotlin-f7ed238b52eb
Annotation은 프로그램 자체의 일부는 아닌 메타데이터 형식이다. 코드의 작동에 직접적인 영향을 미치지는 않지만 빌드 중 컴파일러와 다양한 도구에서 사용되며 리플렉션을 통해 런타임에 액세스할 수도 있다.
클래스 선언
annotation class Loggable
대상 지정 (선택 사항)
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CLASS)
annotation class Loggable
매개변수 추가 (선택 사항)
annotation class Loggable(val level: String = "INFO")
사용
@Loggable(level = "DEBUG" )
class UserService
fun checkLoggable(function: KFunction<*>) {
function.findAnnotation<Loggable>()?.let {
println("Function ${function.name} is loggable with level ${it.level}.")
}
}
// Usage
checkLoggable(::updateUser)
Reflection, kapt, ksp 등을 사용하여 처리 가능