如果我們把這兩天做的練習依序寫好,並在手機上運作會發現。
根本法有效組合阿!!! 因為我們在 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
}
我們可以從這裡看到,我們在使用者手勢操作不同時給予了不同模式。
我們判斷到使用者移動手指時,會運用模式做第二次判斷,就可以將移動跟縮放的功能分類。
但這樣還不夠,我們還需要在使用者手指離開時,模式換回預設。如果不這麼做,你會發現有時候我們在縮放的同時,圖片會移動位置。
這樣一個移動且縮放圖片的小專案就完成囉。
今天我們就先到這裡,明天見囉。