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 } } }
回響