2009-12-17 09:08 墳墓 (Brian Hsu)
話說 Android 裡的 ScrollView 是不能 click 的,但為了模擬出 AVG 裡的對話框效果,又想要讓文字超過對話框大小時自動出現捲軸功能,於是就用下面的奇技淫巧做了一個可以 click 的 ScrollView。
然後在這裡 click 的定義是按下的點與最後放開的點,X/Y 軸的距離各不超過 MAX_OFFSET ,至於這個值要用什麼比較好,目前還在測試。
import android.content.Context
import android.util.AttributeSet
import android.widget.ScrollView
import android.widget.TextView
import android.view.View
import android.view.MotionEvent
import android.util.Log
class ViewMessageBox (context: Context, attrs: AttributeSet) extends
ScrollView (context, attrs)
{
init ()
private lazy val textView = new TextView (context)
private val MAX_OFFSET = 1
private def init ()
{
textView.setText ("Hello World")
textView.setTextSize (20)
addView (textView)
this.setClickable (true)
this.setFocusable (true)
this.setOnTouchListener (onTouchListener)
}
/**
* 重點在這裡。
*
* Click 的定義:壓下與放開的點誤差不超過 1
*/
private lazy val onTouchListener = new View.OnTouchListener ()
{
// 壓下起始座標
var startX = 0.0
var startY = 0.0
def onTouch (view: View, event: MotionEvent) = {
event.getAction match {
case MotionEvent.ACTION_DOWN =>
startX = event.getX
startY = event.getY
case MotionEvent.ACTION_UP =>
if (Math.abs(startX - event.getX) < MAX_OFFSET &&
Math.abs(startY - event.getY) < MAX_OFFSET) {
Log.e ("qqq", "Clicked[")
}
case _ =>
}
false
}
}
}

回響