【Android】 화면 터치 이벤트 구현
소개
내가 개발 한 앱 쿠미와케에서는 양식 입력 화면에서 아무 곳이나 두 번 탭하면 맨 위 양식에 입력 할 수있는 기능을 구현합니다. 왜 이 기능을 구현했는가 하면, 최근의 휴대폰은 화면이 너무 커서 위의 폼까지 손가락이 여유로 닿지 않기 때문입니다.
이번에는 이러한 화면의 터치 이벤트 취득에 대해 정리해 보았습니다.
터치 이벤트 구현
첫째, 터치 이벤트를 선택하고 싶은 화면의 활동 설명입니다.MyGestureListener
는 제스처 리스너를 상속한 클래스입니다. 나중에 설명합니다.
private lateinit var detector: GestureDetectorCompat
override fun onCreate(savedInstanceState: Bundle?) {
:
//GestureDetectorの初期化とダブルタップリスナの登録
detector = GestureDetectorCompat(this, MyGestureListener())
detector.setOnDoubleTapListener(MyGestureListener())
}
override fun onTouchEvent(event: MotionEvent): Boolean {
mDetector.onTouchEvent(event)
return super.onTouchEvent(event)
}
또한, 터치 영역이 스크롤 뷰인 경우는 onTouchEvent
에서는 터치 이벤트가 스크롤 뷰에 흡수되어 버리기 때문에, 이쪽을 사용합니다.
//スクロールビューの場合こっち呼ぶ
override fun dispatchTouchEvent(event: MotionEvent?): Boolean {
super.dispatchTouchEvent(event)
mDetector.onTouchEvent(event)
return super.onTouchEvent(event)
}
MyGestureListener
는 이런 느낌.
class MyGestureListener() : GestureDetector.SimpleOnGestureListener() {
//ダブルタップイベント
override fun onDoubleTap(event: MotionEvent): Boolean {
//処理あれこれ
return true
}
}
샘플 코드
소개한 「한 손으로 입력 기능」의 실장을 예로서 나타내 둡니다.
class InputForms : AppCompatActivity() {
private lateinit var detector: GestureDetectorCompat
override fun onCreate(savedInstanceState: Bundle?) {
:
//ダブルタップでフォーカスするEditText
val et = findViewById<EditText>(R.id.input_form)
//キーボード表示のためのマネージャ取得
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
//GestureDetectorの初期化とダブルタップリスナの登録
detector = GestureDetectorCompat(this, MyGestureListener(imm, et))
detector.setOnDoubleTapListener(MyGestureListener(imm, et))
//トースト表示
Toast.makeText(this, "画面をダブルタップで入力を開始", Toast.LENGTH_SHORT).show()
}
override fun onTouchEvent(event: MotionEvent): Boolean {
mDetector.onTouchEvent(event)
return super.onTouchEvent(event)
}
}
class MyGestureListener(private val imm: InputMethodManager, val et: EditText) : GestureDetector.SimpleOnGestureListener() {
//ダブルタップイベント
override fun onDoubleTap(event: MotionEvent): Boolean {
//EditTetにフォーカスを当てる
et.requestFocus()
//ソフトキーボードを表示
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS)
return true
}
}
마지막으로
이번은 더블 탭 이벤트를 예로 들었습니다만, MyGestureListener
에서는 SimpleOnGestureListener()
를 계승하고 있으므로, 이하를 참고로 길게 누르거나 싱글 탭 등의 좋아하는 터치 이벤트를 핸들할 수 있습니다.
htps : //로 ゔぇぺぺr. 안 d로이 d. 코 m/레후에렌세/안 d로이 d/ごぃえ w/게 s 얽혀서 c와 r. mp ぇ 온게 s 트레 s s 네 # rb ぃ c
덧붙여 하나의 동작에서도 복수의 이벤트가 발생하므로 어느 이벤트를 핸들 하면 좋을지는 고려해 주세요. 이하의 사이트 등이 참고가 됩니다.
htps : // ぢ xq. 네 t/안 d로이 d/02_04. HTML
Reference
이 문제에 관하여(【Android】 화면 터치 이벤트 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/KawabeAtsushi/items/47385cb3b8d5c648d2ff
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
첫째, 터치 이벤트를 선택하고 싶은 화면의 활동 설명입니다.
MyGestureListener
는 제스처 리스너를 상속한 클래스입니다. 나중에 설명합니다.
private lateinit var detector: GestureDetectorCompat
override fun onCreate(savedInstanceState: Bundle?) {
:
//GestureDetectorの初期化とダブルタップリスナの登録
detector = GestureDetectorCompat(this, MyGestureListener())
detector.setOnDoubleTapListener(MyGestureListener())
}
override fun onTouchEvent(event: MotionEvent): Boolean {
mDetector.onTouchEvent(event)
return super.onTouchEvent(event)
}
또한, 터치 영역이 스크롤 뷰인 경우는
onTouchEvent
에서는 터치 이벤트가 스크롤 뷰에 흡수되어 버리기 때문에, 이쪽을 사용합니다.
//スクロールビューの場合こっち呼ぶ
override fun dispatchTouchEvent(event: MotionEvent?): Boolean {
super.dispatchTouchEvent(event)
mDetector.onTouchEvent(event)
return super.onTouchEvent(event)
}
MyGestureListener
는 이런 느낌.
class MyGestureListener() : GestureDetector.SimpleOnGestureListener() {
//ダブルタップイベント
override fun onDoubleTap(event: MotionEvent): Boolean {
//処理あれこれ
return true
}
}
샘플 코드
소개한 「한 손으로 입력 기능」의 실장을 예로서 나타내 둡니다.
class InputForms : AppCompatActivity() {
private lateinit var detector: GestureDetectorCompat
override fun onCreate(savedInstanceState: Bundle?) {
:
//ダブルタップでフォーカスするEditText
val et = findViewById<EditText>(R.id.input_form)
//キーボード表示のためのマネージャ取得
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
//GestureDetectorの初期化とダブルタップリスナの登録
detector = GestureDetectorCompat(this, MyGestureListener(imm, et))
detector.setOnDoubleTapListener(MyGestureListener(imm, et))
//トースト表示
Toast.makeText(this, "画面をダブルタップで入力を開始", Toast.LENGTH_SHORT).show()
}
override fun onTouchEvent(event: MotionEvent): Boolean {
mDetector.onTouchEvent(event)
return super.onTouchEvent(event)
}
}
class MyGestureListener(private val imm: InputMethodManager, val et: EditText) : GestureDetector.SimpleOnGestureListener() {
//ダブルタップイベント
override fun onDoubleTap(event: MotionEvent): Boolean {
//EditTetにフォーカスを当てる
et.requestFocus()
//ソフトキーボードを表示
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS)
return true
}
}
마지막으로
이번은 더블 탭 이벤트를 예로 들었습니다만, MyGestureListener
에서는 SimpleOnGestureListener()
를 계승하고 있으므로, 이하를 참고로 길게 누르거나 싱글 탭 등의 좋아하는 터치 이벤트를 핸들할 수 있습니다.
htps : //로 ゔぇぺぺr. 안 d로이 d. 코 m/레후에렌세/안 d로이 d/ごぃえ w/게 s 얽혀서 c와 r. mp ぇ 온게 s 트레 s s 네 # rb ぃ c
덧붙여 하나의 동작에서도 복수의 이벤트가 발생하므로 어느 이벤트를 핸들 하면 좋을지는 고려해 주세요. 이하의 사이트 등이 참고가 됩니다.
htps : // ぢ xq. 네 t/안 d로이 d/02_04. HTML
Reference
이 문제에 관하여(【Android】 화면 터치 이벤트 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/KawabeAtsushi/items/47385cb3b8d5c648d2ff
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Android】 화면 터치 이벤트 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KawabeAtsushi/items/47385cb3b8d5c648d2ff텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)