#導覽列 #文章列表 #許洛豪
在光之翼的守護下訴說著一段段的英雄傳說。 [ 首頁 | 網誌 | 相簿 | 留言 | 訂閱 ]

[Android] 可以 click 的 ScrollView。

話說 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
        }
    }

}
將本文加入 Hemidemi 書籤
Brian Hsu (墳墓)
2009-12-17 (週四) 09:08:55


留下迴響







請勿使用注音文或火星文!並請遵守發規則,本站亦不歡迎匿名留言。