社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

View has onTouchListner called on it but doesn’t override performClick (kotlin)

問題
以下のようにある ImageView のインスタンスに対して、setOnTouchListener を実装して画像に対するタッチイベントを実装したところ、動作はするのですが、”View has onTouchListner called on it but doesn’t override performClick” の警告がIDE上で表示されたままになりました。

image.setOnTouchListener { v, event ->
(省略)

対処
performClickをoverrideしないといけないという警告ですが、元の ImageView に対して行うのは大変なので、CustomImageView というクラスを作成して、そこで override してあげるようにします。
2つのコンストラクタもきちんと定義しておかないと、コンパイルエラーになります。

class CustomImageView : AppCompatImageView {
    constructor(ctx: Context) : super(ctx)

    constructor(ctx: Context, attrs: AttributeSet): super(ctx, attrs)

    override fun performClick(): Boolean {
        super.performClick()
        return true
    }
}

レイアウトファイル上で、CustomImageView を使用するように指定します。
パッケージ名+クラス名で指定します。

        <com.itstudy365.lesson.CustomImageView
                android:id="@+id/enemy_image"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingTop="40dp"
                android:layout_gravity="center"
                app:srcCompat="@drawable/imagefile"/>

アクティビィティ側において、CustomImageView の型でインスタンスを生成するようにします。

private val image: CustomImageView = this.findViewById(R.id.enemy_image)

以上で警告が表示されなくなりました。