안드로이드에서 위젯을 만들때, 일반적인 앱을 만드는 것과 달리 레이아웃 구성에 제약이 상당히 많다.

사용할 수 있는 View와 Layout 타입이 한정되어 있고, 인식할 수 있는 제스처 타입도 두가지밖에 없다. 그래서 ConstraintLayout, RecyclerView, Custom View 등 평소 즐겨쓰던 치트키들이 모두 봉인된 상태로 개발을 해야한다.

 

이런건 뭐 번거로움을 감수하면 되지만... 위젯의 ImageView에서 벡터 포맷의 이미지를 사용하면 표시가 되지를 않는다.

열심히 삽질을 해봤으나 원인은 아직 모르겠다. png, jpg 타입의 이미지가 없고 벡터 타입을 꼭 사용해야 할 때... 비트맵으로 변환하는 야매 해결법을 메모해둔다.

object VectorUtils {

    fun vectorToBitmap(context: Context, @DrawableRes resId: Int, scale: Float = 1f): Bitmap? {
        val drawable = AppCompatResources.getDrawable(context, resId) ?: return null
        val bitmap = Bitmap.createBitmap(
            drawable.intrinsicWidth,
            drawable.intrinsicHeight,
            Bitmap.Config.ARGB_8888
        )
        val canvas = Canvas(bitmap)
        drawable.setBounds(0, 0, (canvas.width * scale).toInt(), (canvas.height * scale).toInt())
        drawable.draw(canvas)
        return bitmap
    }
}