Picasso에서 원형으로 잘라낸 이미지에 테두리

입문


Picasso로 그림을 둥글게 자른 것은 Picasso에서 필렛 이미지 그리기 등에서 소개된 것이지만, 자른 그림에 테두리를 덧붙이고 싶어서 조사한 노트입니다.
이번에 사용한 프로그램 라이브러리의 버전은 아래와 같으니 적당히 바꾸십시오.
  • com.squareup.picasso:picasso:2.71828
  • 실시


    항간의 Circle Transform에 손을 조금 더 넣는 형식으로 이루어졌다.
    BorderedCircleTransform.kt
    import android.graphics.*
    import com.squareup.picasso.Transformation
    
    class BorderedCircleTransform(
        private val borderColor: Int,
        private val borderSize: Int
    ) : Transformation {
    
        override fun transform(source: Bitmap?): Bitmap? {
            source ?: return null
    
            val size = Math.min(
                source.width,
                source.height
            )
    
            val x = (source.width - size) / 2
            val y = (source.height - size) / 2
    
            val squaredBitmap = Bitmap.createBitmap(
                source,
                x,
                y,
                size,
                size
            )
    
            if (squaredBitmap != source) {
                source.recycle()
            }
    
            val bitmap = Bitmap.createBitmap(
                size,
                size,
                source.config
            )
    
            val canvas = Canvas(bitmap)
            val paint = Paint().apply {
                shader = BitmapShader(
                    squaredBitmap,
                    Shader.TileMode.CLAMP,
                    Shader.TileMode.CLAMP
                )
                isAntiAlias = true
            }
    
            val r = size / 2f
            Canvas(bitmap).drawCircle(
                r,
                r,
                r,
                paint
            )
    
            val paintBg = Paint().apply {
                color = borderColor
                isAntiAlias = true
            }
    
            canvas.drawCircle(
                r,
                r,
                r,
                paintBg
            )
    
            canvas.drawCircle(
                r,
                r,
                r - borderSize,
                paint
            )
    
            squaredBitmap.recycle()
    
            return bitmap
        }
    
        override fun key(): String = "bordered_circle"
    }
    
    호출할 때 테두리의 색깔과 굵기를 지정할 수 있습니다.
            Picasso.get()
                .load(URL)
                .transform(
                    BorderedCircleTransform(
                        borderColor = Color.RED,
                        borderSize = 4
                    )
                )
                .into(image_view_bordered_circle)
    
    글자 색은 빨간색, 굵기는 4로 지정하면 이런 느낌이다.

    끝내다


    ImageView의 속성에 원형과 테두리를 그리는 시대가 빨리 왔으면 합니다.

    좋은 웹페이지 즐겨찾기