大家好,我是公衆号3分鐘學堂的郭立員,今天繼續我們按鍵精靈安卓版的教程講解,這期講一下腳本模拟手動滑動的案例,下面開始講解。
這是一個按照指定路徑滑動的驗證圖,從1到4按照順序滑動。通常我們會通過打碼平台獲取這幾個點的坐标值,之後在進行模拟人工滑動,今天這篇文章就是關于滑動這部分的内容。
在講解這個之前我們先來理解一個概念:相對坐标和絕對坐标。下面我們結合圖例來說一下:
(一)絕對坐标:
這個坐标是我們平時最常用的坐标。
圖中①位置的坐标是188,386,它的數值是根據它和模拟器屏幕(手機屏幕)左上角的距離得到的。
(二)相對坐标。
同樣還是①這個位置,坐标變成了183,74,這個坐标是相對于紅框左上角的位置得到,也就是把方框左上角當做(0,0)。我們通過打碼平台得到坐标數值,因為平台隻是收到你的圖片截圖,并不知道圖片在你手機屏幕的什麼位置,所以隻能是給你相對于圖片左上角的坐标。
(三)相對坐标怎麼轉換成絕對坐标。
用相對坐标加上你的截圖時截圖範圍的左上角坐标值,就是絕對坐标了。
還是上圖,①點的相對坐标是(183,74),圖片左上角坐标是(5,312)
那麼絕對坐标計算方法(183 5,74 312),計算結果得到絕對坐标是(188,386)。
接下來講滑動這部分内容:
先介紹一下坐标返回值:183,74|342,177|205,223|332,76
這些坐标都是相對于圖片左上角的相對坐标。
圖片的截圖的位置坐标(5,312)
下面開始滑動方式,我們從簡到難的介紹,涉及到的滑動命令:
TouchDown x1, y1, 1
TouchDown x2, y2, 1, 100
TouchUp 1
(一)固定值滑動
先計算出每一個點的絕對坐标,然後從1開始滑動3次。
Dim x0=5,y0=312 //截圖對應的左上角坐标
Dim 返回值="183,74|342,177|205,223|332,76"
Dim 點數組=split(返回值,"|")
Dim 點1=split(點數組(0),",")
Dim 點1x=點1(0) x0
Dim 點1y=點1(1) y0
Dim 點2=split(點數組(1),",")
Dim 點2x=點2(0) x0
Dim 點2y=點2(1) y0
Dim 點3=split(點數組(2),",")
Dim 點3x=點3(0) x0
Dim 點3y=點3(1) y0
Dim 點4=split(點數組(3),",")
Dim 點4x=點4(0) x0
Dim 點4y=點4(1) y0
TouchDown 點1x, 點1y, 1
TouchMove 點2x, 點2y, 1, 1000
TouchMove 點3x, 點3y, 1, 1000
TouchMove 點4x, 點4y, 1, 1000
TouchUp 1
(二)循環滑動
上面的方法雖然直觀,但是代碼看着略顯臃腫,并且每個點具有規律性,所以可以用循環來寫。
Dim x0=5,y0=312
Dim 返回值="183,74|342,177|205,223|332,76"
Dim 點數組=split(返回值,"|")
For i = 0 To UBOUND(點數組)
Dim 坐标=split(點數組(i),",")
If i = 0 Then
TouchDown 坐标(0) x0, 坐标(1) y0, 1
Else
TouchMove 坐标(0) x0, 坐标(1) y0, 1, 1000
End If
Next
(三)固定分段滑動
所謂分段滑動,就是把兩點之間加幾個點,并且點不在一條直線上,形成折線的效果。
以上圖為例,兩點之間分成了4段,假設是4等分,中間3個拐點的坐标計算方法是:
第1個拐點:點① (點②-點①)*25%
第2個拐點:點① (點②-點①)*50%
第3個拐點:點① (點②-點①)*75%
為了不讓每個拐點都在一條直線上,得到坐标加上一個随機數,範圍是(-5,5)。
Dim x0=5,y0=312
Dim x,y
Dim 返回值="183,74|342,177|205,223|332,76"
Dim 點數組=split(返回值,"|")
For i = 0 To UBOUND(點數組)
Dim 坐标=split(點數組(i),",")
If i = 0 Then
x = 坐标(0) x0
y = 坐标(1) y0
TouchDown x, y, 1
Else
TouchMove x (坐标(0) x0 - x) * 0.25 rand(), y (坐标(1) y0 - y) * 0.25 rand(), 1, 500
TouchMove x (坐标(0) x0 - x) * 0.5 rand(), y (坐标(1) y0 - y) * 0.5 rand(), 1, 500
TouchMove x (坐标(0) x0 - x) * 0.75 rand(), y (坐标(1) y0 - y) * 0.75 rand(), 1, 500
TouchMove 坐标(0) x0, 坐标(1) y0, 1, 500
x = 坐标(0) x0
y = 坐标(1) y0
End If
Next
Function rand()
rand=int(11*rnd()-5)
End Function
可以看到線條有一定的彎曲度了,不再是直線。
(四)自定義分段數滑動
上面說的是4段,其實也可以用循環來實現
Dim x0=5,y0=312
Dim x,y
Dim 返回值="183,74|342,177|205,223|332,76"
Dim 點數組=split(返回值,"|")
For i = 0 To UBOUND(點數組)
Dim 坐标=split(點數組(i),",")
If i = 0 Then
x = 坐标(0) x0
y = 坐标(1) y0
TouchDown x, y, 1
Else
For j = 1 To 4
TouchMove x (坐标(0) x0 - x) * (j/4) rand(), y (坐标(1) y0 - y) * (j/4) rand(), 1, 500
Next
x = 坐标(0) x0
y = 坐标(1) y0
End If
Next
Function rand()
rand=int(11*rnd()-5)
End Function
在代碼中的4就是段數
如果用變量表示,就可以控制段數了。來寫個分8段看看
Dim x0=5,y0=312
Dim x,y
Dim 段數=8
Dim 返回值="183,74|342,177|205,223|332,76"
Dim 點數組=split(返回值,"|")
For i = 0 To UBOUND(點數組)
Dim 坐标=split(點數組(i),",")
If i = 0 Then
x = 坐标(0) x0
y = 坐标(1) y0
TouchDown x, y, 1
Else
For j = 1 To 段數
TouchMove x (坐标(0) x0 - x) * (j/段數) rand(), y (坐标(1) y0 - y) * (j/段數) rand(), 1, 500
Next
x = 坐标(0) x0
y = 坐标(1) y0
End If
Next
Function rand()
rand=int(11*rnd()-5)
End Function
段數越多,線條越曲折,不過需要注意如果每一段用時是固定的話,段數越多用時越長,這樣也不好,所以把段數和用時也做關聯性。
來個28段的效果。
Dim x0=5,y0=312
Dim x,y
Dim 段數=28
Dim 返回值="183,74|342,177|205,223|332,76"
Dim 點數組=split(返回值,"|")
For i = 0 To UBOUND(點數組)
Dim 坐标=split(點數組(i),",")
If i = 0 Then
x = 坐标(0) x0
y = 坐标(1) y0
TouchDown x, y, 1
Else
For j = 1 To 段數
TouchMove x (坐标(0) x0 - x) * (j/段數) rand(), y (坐标(1) y0 - y) * (j/段數) rand(), 1, int(2000/段數)
Next
x = 坐标(0) x0
y = 坐标(1) y0
End If
Next
Function rand()
rand=int(11*rnd()-5)
End Function
最後我們來封裝個函數
Dim x0=5,y0=312
Dim 段數=28
Dim 返回值="183,74|342,177|205,223|332,76"
Call 分段滑動(返回值, x0, y0, 段數)
Function 分段滑動(返回值, x0, y0, 段數)
Dim x,y
Dim 點數組=split(返回值,"|")
For i = 0 To UBOUND(點數組)
Dim 坐标=split(點數組(i),",")
If i = 0 Then
x = 坐标(0) x0
y = 坐标(1) y0
TouchDown x, y, 1
Else
For j = 1 To 段數
TouchMove x (坐标(0) x0 - x) * (j/段數) rand(), y (坐标(1) y0 - y) * (j/段數) rand(), 1, int(2000/段數)
Next
x = 坐标(0) x0
y = 坐标(1) y0
End If
Next
End Function
Function rand()
rand=int(11*rnd()-5)
End Function
大功告成,整篇文章的内容就是我在編寫這段代碼時的思考過程。有時候代碼不是一撮而就的,而是不斷修改完善,最終實現自己想要的效果。
好了内容就這些,最後還是老規矩,覺得文章還行的話,點贊、轉發、留言一條龍服務。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!