[안드로이드]이미지 투명 부분 미클릭하는 Custom ImageView

용씨·2021년 7월 24일
0

[공경진] fillin-map

목록 보기
3/9

이미지의 투명 부분을 미클릭하는 방법

1. Custom ImageView 클래스 생성

/**
 * 출처 
 * Created by leetid@naver.com on 2018-04-09.
 */
 
@SuppressLint("ClickableViewAccessibility")
class ObjectClickImageView(context: Context?, @Nullable attrs: AttributeSet?) :
    AppCompatImageView(context!!, attrs) {
    private var onTouchListener: OnTouchListener? = null
    private var onObjectClickListener: OnClickListener? = null
    override fun setOnTouchListener(listener: OnTouchListener) {
        onTouchListener = listener
    }

    fun setOnObjectClickListener(@Nullable listener: OnClickListener?) {
        onObjectClickListener = listener
    }

    @SuppressLint("ClickableViewAccessibility")
    private val onObjectTouchListener =
        OnTouchListener { v, event ->
            var consumed = false
            if (onTouchListener != null) consumed = onTouchListener!!.onTouch(v, event)
            if (consumed) return@OnTouchListener true
            if (onObjectClickListener != null) {
                val x = event.x.toInt()
                val y = event.y.toInt()
                when (event.action) {
                    MotionEvent.ACTION_UP -> if (isOnObject(x, y)) return@OnTouchListener true
                    MotionEvent.ACTION_DOWN -> if (isOnObject(x, y)) {
                        onObjectClickListener!!.onClick(v)
                        return@OnTouchListener true
                    }
                }
            }
            false
        }

    private fun isOnObject(x: Int, y: Int): Boolean {
        val bitmap = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888)
        val canvas = Canvas(bitmap)
        draw(canvas)
        if (bitmap == null) return false
        if (Color.alpha(bitmap.getPixel(x, y)) > 0) // Color.aplha가 0이면 투명
            return true
        return false
    }

    init {
        super.setOnTouchListener(onObjectTouchListener)
    }
}

2. 레이아웃 xml에서 ImageView 수정

// 자신의 ObjectClickImageView 경로 입력 
<com.hsu.mapapp.map.ObjectClickImageView
        android:id="@+id/test_image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:src="@drawable/test_image" />

3. 클릭 이벤트

 val test_image:ObjectClickImageView = (binding.test_image)
 test_image.setOnObjectClickListener {...}

참고 사이트 https://www.masterqna.com/android/82796/%ED%81%B4%EB%A6%AD%EA%B0%80%EB%8A%A5%ED%95%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%B7%B0-%EB%B6%80%EB%B6%84%EC%A0%81%EC%9C%BC%EB%A1%9C-%EA%B2%B9%EC%B9%A0-%EC%88%98-%EC%9E%88%EC%9D%84%EA%B9%8C%EC%9A%94-%EA%B7%B8%EB%A6%BC-%EC%B2%A8%EB%B6%80

profile
아침형 인간이 목표

0개의 댓글