Android学习笔记-手势识别
程序员文章站
2024-03-24 15:00:52
...
手势识别(Kotlin)
参考fwens并作出调整
本案例对id为img的ImageView使用手势识别
01 简单使用(使用OnTouchListener)
img.setOnTouchListener(View.OnTouchListener{view,motionEvent ->
when(motionEvent.action){
MotionEvent.ACTION_DOWN -> {
Toast.makeText(this,"按下",Toast.LENGTH_SHORT).show()
}
MotionEvent.ACTION_UP -> {
Toast.makeText(this,"抬起",Toast.LENGTH_SHORT).show()
}
}
return@OnTouchListener true
})
motionEvent类中的常量:
-
public static final int ACTION_DOWN = 0;按下
-
public static final int ACTION_UP = 1;抬起
-
public static final int ACTION_MOVE = 2;移动
-
public static final int ACTION_CANCEL = 3;取消
判断是向左还是向右
var x1 :Float = 0F
var x2 :Float = 0F
img.setOnTouchListener(View.OnTouchListener{view,motionEvent ->
when(motionEvent.action){
MotionEvent.ACTION_DOWN -> {
x1 = motionEvent.x
}
MotionEvent.ACTION_UP -> {
x2 = motionEvent.x
if (x1 - x2 > 0)
{
Toast.makeText(getApplicationContext(), "正在向左滑动", Toast.LENGTH_SHORT).show();
}
else if (x1 - x2 < 0)
{
Toast.makeText(getApplicationContext(), "正在向右滑动", Toast.LENGTH_SHORT).show();
}
}
}
return@OnTouchListener true
})
02 使用手势探测器
自定义监听器
class MyOnTouch(context: Context) : GestureDetector.OnGestureListener {
var context: Context = context
//按下时调用
override fun onDown(motionEvent: MotionEvent): Boolean {
Toast.makeText(context, "onDown", Toast.LENGTH_SHORT).show()
return true
}
//按下后未移动未松开时调用
override fun onShowPress(motionEvent: MotionEvent) {
Toast.makeText(context, "onShowPress", Toast.LENGTH_SHORT).show()
}
//按下后立即抬起时调用
override fun onSingleTapUp(motionEvent: MotionEvent): Boolean {
Toast.makeText(context, "onSingleTapUp", Toast.LENGTH_SHORT).show()
return true
}
//滚动时调用,鼠标滚轮滚动也能触发
override fun onScroll(
motionEvent: MotionEvent,
motionEvent1: MotionEvent,
v: Float,
v1: Float
): Boolean {
Toast.makeText(context, "onScroll", Toast.LENGTH_SHORT).show()
return true
}
//长按时调用
override fun onLongPress(motionEvent: MotionEvent) {
Toast.makeText(context, "onLongPress", Toast.LENGTH_SHORT).show()
}
//滑动时调用
override fun onFling(
motionEvent: MotionEvent,
motionEvent1: MotionEvent,
v: Float,
v1: Float
): Boolean {
Toast.makeText(context, "onFling", Toast.LENGTH_SHORT).show()
return true
}
}
对img使用手势探测器
//手势检测器
var gestureDetectorCompat: GestureDetectorCompat = GestureDetectorCompat(this,MyOnTouch(this))
img.setOnTouchListener(View.OnTouchListener{ view, motionEvent->
return@OnTouchListener gestureDetectorCompat.onTouchEvent(motionEvent);
})
部分参数解释:
motionEvent :第一个按下的触摸,即滑动时手指第一次按下时触发
motionEvent1:第二个MotionEvent参数,为手指滑动后抬起时触发,即滑动完成抬起手指时
v:X轴上的移动速度,像素/秒
v1:Y轴上的移动速度,像素/秒
推荐阅读
-
Android点击事件之多点触摸与手势识别
-
Android学习笔记-手势识别
-
Android animation学习笔记之propery animation
-
Android Binder 机制初步学习 笔记(三)—— Binder 进程通讯库简介
-
【android学习笔记】第三篇——基础控件1
-
Android学习笔记2012年(2012-11-23至2012-11-27) 博客分类: android开发技术 android
-
零基础入门CV赛事-Task3字符识别模型学习笔记
-
《机器学习实战》个人学习记录笔记(三)———k-近邻算法实战之sklearn手写数字识别
-
Android GestureDetector手势监听 博客分类: Android_笔记 GestureDetectorandroid
-
Android MVP框架学习笔记,demo模拟一个注册登录过程