iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
0

等等...是不是哪裡怪怪的?

如果我們把這兩天做的練習依序寫好,並在手機上運作會發現。
根本法有效組合阿!!! 因為我們在 ActionMove 裡有兩種不同操作模式,那我們該怎麼辦呢?

首先,我們在自定義的 ImageView 裡加入靜態的全域變數。

companion object {
    
        var MODE_NONE = 0
        val MODE_DRAG = 1
        val MODE_ZOOM = 2
        
    }

然後我們在 onTouchEvent 裡面加入分類的要素

override fun onTouchEvent(event: MotionEvent): Boolean {
        when (event.action and MotionEvent.ACTION_MASK) {

            MotionEvent.ACTION_DOWN ->{

                MODE_NONE = MODE_DRAG

                dx = event.rawX - this.x
                dy = event.rawY - this.y

            }



            MotionEvent.ACTION_POINTER_DOWN -> {
                MODE_NONE = MODE_ZOOM
                beforeDistance = getdistance(event)
            }

            MotionEvent.ACTION_MOVE -> {

                when(MODE_NONE) {

                    1 -> {

                        this.x = event.rawX - dx
                        this.y = event.rawY - dy

                    }

                    2 -> {
                        val afterdistance = getdistance(event)
                        scaleImage(afterdistance)
                        beforeDistance = afterdistance
                    }
                }
            }

            MotionEvent.ACTION_UP -> {
                MODE_NONE = 0
            }

            MotionEvent.ACTION_POINTER_UP -> {
                MODE_NONE = 0
            }

        }

        return true
    }

我們可以從這裡看到,我們在使用者手勢操作不同時給予了不同模式。
我們判斷到使用者移動手指時,會運用模式做第二次判斷,就可以將移動跟縮放的功能分類。

但這樣還不夠,我們還需要在使用者手指離開時,模式換回預設。如果不這麼做,你會發現有時候我們在縮放的同時,圖片會移動位置。

這樣一個移動且縮放圖片的小專案就完成囉。

今天我們就先到這裡,明天見囉。


上一篇
Day7_ScalableImageView
下一篇
Day9_WebViewSearch
系列文
發現新大陸-Android Kotlin 開發之路30

尚未有邦友留言

立即登入留言