日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 滑动过程 触发,android 代码实现模拟用户点击、滑动等操作

發布時間:2024/8/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 滑动过程 触发,android 代码实现模拟用户点击、滑动等操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/**

* 模擬用戶點擊

*

* @param view 要觸發操作的view

* @param x 相對于要操作view的左上角x軸偏移量

* @param y 相對于要操作view的左上角y軸偏移量

*/

private static void analogUserClick(View view, float x, float y) {

if (view == null) {

return;

}

LogUtil.e(TAG_POINT, "正在模擬點擊操作:p->" + x + "," + y);

long downTime = SystemClock.uptimeMillis();//模擬按下去的時間

long eventTime = downTime;//事件發生時間

MotionEvent downEvent = MotionEvent.obtain(downTime, eventTime,

ACTION_DOWN, x, y, 0);

view.onTouchEvent(downEvent);

eventTime = eventTime + 90;//離開屏幕時間

MotionEvent upEvent = MotionEvent.obtain(downTime, eventTime,

MotionEvent.ACTION_UP, x, y, 0);

view.onTouchEvent(upEvent);

//回收事件

downEvent.recycle();

upEvent.recycle();

}

/**

* 模擬用戶滑動操作

*

* @param view 要觸發操作的view

* @param type 模擬操作類型:均勻滑動、快速滑動

* @param p1x 滑動的起始點x坐標

* @param p1y 滑動的起始點y坐標

* @param p2x 滑動的終點x坐標

* @param p2y 滑動的終點y坐標

*/

private static void analogUserScroll(View view, final int type, final float p1x, final float p1y, final float p2x, final float p2y) {

LogUtil.e(TAG_POINT, "正在模擬滑屏操作:p1->" + p1x + "," + p1y + ";p2->" + p2x + "," + p2y);

if (view == null) {

return;

}

long downTime = SystemClock.uptimeMillis();//模擬按下去的時間

long eventTime = downTime;

float pX = p1x;

float pY = p1y;

int speed = 0;//快速滑動

float touchTime = 116;//模擬滑動時發生的觸摸事件次數

//平均每次事件要移動的距離

float perX = (p2x - p1x) / touchTime;

float perY = (p2y - p1y) / touchTime;

boolean isReversal = perX < 0 || perY < 0;//判斷是否反向:手指從下往上滑動,或者手指從右往左滑動

boolean isHandY = Math.abs(perY) > Math.abs(perX);//判斷是左右滑動還是上下滑動

if (type == USER_TOUCH_TYPE_1) {//加速滑動

touchTime = 10;//如果是快速滑動,則發生的觸摸事件比均勻滑動更少

speed = isReversal ? -20 : 20;//反向移動則坐標每次遞減

}

//模擬用戶按下

MotionEvent downEvent = MotionEvent.obtain(downTime, eventTime,

ACTION_DOWN, pX, pY, 0);

view.onTouchEvent(downEvent);

//模擬移動過程中的事件

List moveEvents = new ArrayList<>();

boolean isSkip = false;

for (int i = 0; i < touchTime; i++) {

pX += (perX + speed);

pY += (perY + speed);

if ((isReversal && pX < p2x) || (!isReversal && pX > p2x)) {

pX = p2x;

isSkip = !isHandY;

}

if ((isReversal && pY < p2y) || (!isReversal && pY > p2y)) {

pY = p2y;

isSkip = isHandY;

}

eventTime += 20.0f;//事件發生的時間要不斷遞增

MotionEvent moveEvent = getMoveEvent(downTime, eventTime, pX, pY);

moveEvents.add(moveEvent);

view.onTouchEvent(moveEvent);

if (type == USER_TOUCH_TYPE_1) {//加速滑動

speed += (isReversal ? -70 : 70);

}

if (isSkip) {

break;

}

}

//模擬手指離開屏幕

MotionEvent upEvent = MotionEvent.obtain(downTime, eventTime,

MotionEvent.ACTION_UP, pX, pY, 0);

view.onTouchEvent(upEvent);

//回收觸摸事件

downEvent.recycle();

for (int i = 0; i < moveEvents.size(); i++) {

moveEvents.get(i).recycle();

}

upEvent.recycle();

}

原文:http://www.cnblogs.com/agilezhu/p/7196940.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的android 滑动过程 触发,android 代码实现模拟用户点击、滑动等操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。