Android:GestureDetector.SimpleOnGestureListener,onFling,onScroll,record velocityX,Y & distanceX,Y in the ScrollView,kotlin
import android.os.Bundle
import android.view.GestureDetector
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.ScrollView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import java.time.LocalTime
class MainActivity : AppCompatActivity() {
companion object {
var TAG = "test"
}
private var display: TextView? = null
private var scrollView: ScrollView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
display = findViewById(R.id.display)
scrollView?.findViewById<ScrollView>(R.id.scrollView)
var rv = findViewById<RecyclerView>(R.id.recycler_view)
var layoutManager: LinearLayoutManager = LinearLayoutManager(this).apply {
this.orientation = LinearLayoutManager.HORIZONTAL
}
rv.layoutManager = layoutManager
var adapter = MyAdapter()
rv.adapter = adapter
val gestureDetector =
GestureDetector(this, object : GestureDetector.SimpleOnGestureListener() {
override fun onFling(
e1: MotionEvent,
e2: MotionEvent,
velocityX: Float,
velocityY: Float
): Boolean {
appendToDisplay("onFling-velocity:X,Y=${velocityX},${velocityY} e1(${e1.x},${e1.y}) e2(${e2.x},${e2.y})")
return super.onFling(e1, e2, velocityX, velocityY)
}
override fun onScroll(
e1: MotionEvent,
e2: MotionEvent,
distanceX: Float,
distanceY: Float
): Boolean {
appendToDisplay("onScroll-distance:X,Y=${distanceX},${distanceY}")
return super.onScroll(e1, e2, distanceX, distanceY)
}
})
rv.setOnTouchListener(object : View.OnTouchListener {
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
return gestureDetector.onTouchEvent(event!!)
}
})
}
fun appendToDisplay(s: String) {
var str: String = display?.text.toString()
str = "${LocalTime.now()}-> $s\n$str"
display?.text = str
}
class MyAdapter : RecyclerView.Adapter<MyVH>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyVH {
var view = LayoutInflater.from(parent.context)
.inflate(R.layout.item, parent, false)
return MyVH(view)
}
override fun getItemCount(): Int {
return Int.MAX_VALUE
}
override fun onBindViewHolder(holder: MyVH, position: Int) {
holder.textView.text = "@$position"
}
}
class MyVH(itemView: View) : RecyclerView.ViewHolder(itemView) {
var textView = itemView.findViewById<TextView>(R.id.text)
init {
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".MainActivity" />
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/recycler_view"
android:layout_marginTop="10dp">
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/display"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:editable="false"
android:textSize="12dp" />
</ScrollView>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="100dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/ic_launcher" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textSize="20dp" />
</LinearLayout>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@android:color/darker_gray" />
</LinearLayout>