이미지의 투명 부분을 미클릭하는 방법
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