优化实现多点点击
This commit is contained in:
parent
a3fed6ced8
commit
9643d74864
@ -29,49 +29,6 @@ public class AutoClickService extends AccessibilityService {
|
||||
private static final int MIN_SLIDE_DURATION = 100;
|
||||
private static final int MAX_SLIDE_DURATION = 2000;
|
||||
|
||||
// 事件基类
|
||||
public abstract static class Event {
|
||||
public abstract void perform();
|
||||
}
|
||||
|
||||
// 点击事件
|
||||
public class ClickEvent extends Event {
|
||||
public int x;
|
||||
public int y;
|
||||
public int index; // 用于闪烁反馈
|
||||
|
||||
public ClickEvent(int x, int y, int index) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void perform() {
|
||||
performSingleClick(new Point(x, y), index);
|
||||
}
|
||||
}
|
||||
|
||||
// 滑动事件
|
||||
public class SlideEvent extends Event {
|
||||
public int startX;
|
||||
public int startY;
|
||||
public int endX;
|
||||
public int endY;
|
||||
|
||||
public SlideEvent(int startX, int startY, int endX, int endY) {
|
||||
this.startX = startX;
|
||||
this.startY = startY;
|
||||
this.endX = endX;
|
||||
this.endY = endY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void perform() {
|
||||
performSingleSlide(this);
|
||||
}
|
||||
}
|
||||
|
||||
private final List<Event> eventQueue = new ArrayList<>();
|
||||
private final Handler handler = new Handler(Looper.getMainLooper());
|
||||
private boolean isRunning = false;
|
||||
@ -140,7 +97,7 @@ public class AutoClickService extends AccessibilityService {
|
||||
Point constrainedStart = ViewUtils.constrainToScreen(startX, startY, screenWidth, screenHeight);
|
||||
Point constrainedEnd = ViewUtils.constrainToScreen(endX, endY, screenWidth, screenHeight);
|
||||
|
||||
eventQueue.add(new SlideEvent(
|
||||
eventQueue.add(new SlideMultipleEvent(
|
||||
constrainedStart.x, constrainedStart.y,
|
||||
constrainedEnd.x, constrainedEnd.y));
|
||||
|
||||
@ -150,7 +107,7 @@ public class AutoClickService extends AccessibilityService {
|
||||
|
||||
public void addMultipleSlideEvents(List<Slide> slides) {
|
||||
for (Slide slide : slides) {
|
||||
addSlideEvent((int) slide.startX, (int) slide.startY, (int) slide.endX, (int) slide.endY);
|
||||
addSlideEvent(slide.startX, slide.startY, slide.endX, slide.endY);
|
||||
}
|
||||
logDebug("添加多个滑动事件: " + slides.size() + " 个");
|
||||
}
|
||||
@ -215,7 +172,29 @@ public class AutoClickService extends AccessibilityService {
|
||||
}
|
||||
|
||||
Event event = eventQueue.get(currentEventIndex);
|
||||
event.perform();
|
||||
|
||||
if (event instanceof ClickEvent) {
|
||||
ClickEvent clickEvent = (ClickEvent) event;
|
||||
logDebug("即将执行点击事件: (" + clickEvent.getX() + ", " + clickEvent.getY() + "), index=" + clickEvent.getAdditionalInfo());
|
||||
} else if (event instanceof SlideMultipleEvent) {
|
||||
SlideMultipleEvent slideMultipleEvent = (SlideMultipleEvent) event;
|
||||
logDebug("即将执行滑动事件: 从 (" + slideMultipleEvent.startX + ", " + slideMultipleEvent.startY + ") 到 (" + slideMultipleEvent.endX + ", " + slideMultipleEvent.endY + ")");
|
||||
} else {
|
||||
logDebug("未知事件类型: " + event.getClass().getSimpleName());
|
||||
}
|
||||
|
||||
if (event instanceof ClickEvent) {
|
||||
ClickEvent clickEvent = (ClickEvent) event;
|
||||
Point clickPoint = new Point(clickEvent.getX(), clickEvent.getY());
|
||||
performSingleClick(clickPoint, clickEvent.getAdditionalInfo());
|
||||
} else if (event instanceof SlideMultipleEvent) {
|
||||
SlideMultipleEvent slideMultipleEvent = (SlideMultipleEvent) event;
|
||||
performSlide(slideMultipleEvent);
|
||||
} else {
|
||||
logDebug("未知事件类型,跳过执行: " + event.getClass().getSimpleName());
|
||||
// 也可以选择继续执行下一个
|
||||
handler.postDelayed(this::executeNextEvent, clickInterval);
|
||||
}
|
||||
|
||||
// 准备下一个事件
|
||||
currentEventIndex = (currentEventIndex + 1) % eventQueue.size();
|
||||
@ -223,7 +202,6 @@ public class AutoClickService extends AccessibilityService {
|
||||
|
||||
private void performSingleClick(Point clickPoint, int index) {
|
||||
logDebug("执行点击: (" + clickPoint.x + ", " + clickPoint.y + ")");
|
||||
flashTouchFeedback(index);
|
||||
|
||||
Path path = new Path();
|
||||
path.moveTo(clickPoint.x, clickPoint.y);
|
||||
@ -238,6 +216,7 @@ public class AutoClickService extends AccessibilityService {
|
||||
logDebug("点击完成");
|
||||
if (isRunning) {
|
||||
handler.postDelayed(() -> executeNextEvent(), clickInterval);
|
||||
flashTouchFeedback(index);
|
||||
}
|
||||
}
|
||||
|
||||
@ -251,7 +230,7 @@ public class AutoClickService extends AccessibilityService {
|
||||
}, null);
|
||||
}
|
||||
|
||||
private void performSingleSlide(SlideEvent slide) {
|
||||
private void performSlide(SlideMultipleEvent slide) {
|
||||
logDebug("执行滑动: 从 (" + slide.startX + ", " + slide.startY +
|
||||
") 到 (" + slide.endX + ", " + slide.endY + ")");
|
||||
|
||||
@ -290,7 +269,6 @@ public class AutoClickService extends AccessibilityService {
|
||||
|
||||
@Override
|
||||
public void onAccessibilityEvent(AccessibilityEvent event) {
|
||||
// 不需要处理辅助功能事件
|
||||
}
|
||||
|
||||
private void logDebug(String message) {
|
||||
|
||||
19
app/src/main/java/com/auto/autoclicker/ClickEvent.java
Normal file
19
app/src/main/java/com/auto/autoclicker/ClickEvent.java
Normal file
@ -0,0 +1,19 @@
|
||||
package com.auto.autoclicker;
|
||||
|
||||
public class ClickEvent extends Event {
|
||||
private int additionalInfo;
|
||||
|
||||
public ClickEvent(int x, int y, int additionalInfo) {
|
||||
super(additionalInfo, x, y);
|
||||
this.additionalInfo = additionalInfo;
|
||||
}
|
||||
|
||||
public int getAdditionalInfo() {
|
||||
return additionalInfo;
|
||||
}
|
||||
|
||||
public void setAdditionalInfo(int additionalInfo) {
|
||||
this.additionalInfo = additionalInfo;
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,7 +8,7 @@ import android.view.View;
|
||||
|
||||
public class ConnectingLineView extends View {
|
||||
private float startX, startY, endX, endY;
|
||||
private Paint paint;
|
||||
private final Paint paint;
|
||||
|
||||
public ConnectingLineView(Context context) {
|
||||
super(context);
|
||||
|
||||
@ -1,5 +1,26 @@
|
||||
package com.auto.autoclicker;
|
||||
|
||||
public interface Event {
|
||||
int getId();
|
||||
public class Event {
|
||||
protected int id;
|
||||
protected int x;
|
||||
protected int y;
|
||||
|
||||
public Event(int id, int x, int y) {
|
||||
this.id = id;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
// Getter 方法
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public int getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public int getY() {
|
||||
return y;
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,24 +1,31 @@
|
||||
package com.auto.autoclicker;
|
||||
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class PointEvent implements Event {
|
||||
int id;
|
||||
float x, y;
|
||||
View view;
|
||||
WindowManager.LayoutParams params;
|
||||
public class PointEvent extends Event {
|
||||
private TextView view;
|
||||
private WindowManager.LayoutParams params;
|
||||
|
||||
PointEvent(int id, float x, float y, View view, WindowManager.LayoutParams params) {
|
||||
this.id = id;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
public PointEvent(int id, int x, int y, TextView view, WindowManager.LayoutParams params) {
|
||||
super(id, x, y);
|
||||
this.view = view;
|
||||
this.params = params;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return id;
|
||||
public TextView getView() {
|
||||
return view;
|
||||
}
|
||||
}
|
||||
|
||||
public WindowManager.LayoutParams getParams() {
|
||||
return params;
|
||||
}
|
||||
|
||||
public void setView(TextView view) {
|
||||
this.view = view;
|
||||
}
|
||||
|
||||
public void setParams(WindowManager.LayoutParams params) {
|
||||
this.params = params;
|
||||
}
|
||||
}
|
||||
@ -1,12 +1,16 @@
|
||||
package com.auto.autoclicker;
|
||||
|
||||
public class Slide {
|
||||
float startX, startY, endX, endY;
|
||||
public final int startX;
|
||||
public final int startY;
|
||||
public final int endX;
|
||||
public final int endY;
|
||||
|
||||
Slide(float startX, float startY, float endX, float endY) {
|
||||
public Slide(int startX, int startY, int endX, int endY) {
|
||||
this.startX = startX;
|
||||
this.startY = startY;
|
||||
this.endX = endX;
|
||||
this.endY = endY;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,25 +1,52 @@
|
||||
package com.auto.autoclicker;
|
||||
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
|
||||
public class SlideEvent implements Event {
|
||||
int id;
|
||||
PointEvent startPoint;
|
||||
PointEvent endPoint;
|
||||
View lineView;
|
||||
WindowManager.LayoutParams lineParams;
|
||||
public class SlideEvent extends Event {
|
||||
private PointEvent startPoint;
|
||||
private PointEvent endPoint;
|
||||
private ConnectingLineView lineView;
|
||||
private WindowManager.LayoutParams lineParams;
|
||||
|
||||
SlideEvent(int id, PointEvent startPoint, PointEvent endPoint, View lineView, WindowManager.LayoutParams lineParams) {
|
||||
this.id = id;
|
||||
public SlideEvent(int id, PointEvent startPoint, PointEvent endPoint,
|
||||
ConnectingLineView lineView, WindowManager.LayoutParams lineParams) {
|
||||
super(id, 0, 0);
|
||||
this.startPoint = startPoint;
|
||||
this.endPoint = endPoint;
|
||||
this.lineView = lineView;
|
||||
this.lineParams = lineParams;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return id;
|
||||
public PointEvent getStartPoint() {
|
||||
return startPoint;
|
||||
}
|
||||
|
||||
public PointEvent getEndPoint() {
|
||||
return endPoint;
|
||||
}
|
||||
|
||||
public ConnectingLineView getLineView() {
|
||||
return lineView;
|
||||
}
|
||||
|
||||
public WindowManager.LayoutParams getLineParams() {
|
||||
return lineParams;
|
||||
}
|
||||
|
||||
public void setStartPoint(PointEvent startPoint) {
|
||||
this.startPoint = startPoint;
|
||||
}
|
||||
|
||||
public void setEndPoint(PointEvent endPoint) {
|
||||
this.endPoint = endPoint;
|
||||
}
|
||||
|
||||
public void setLineView(ConnectingLineView lineView) {
|
||||
this.lineView = lineView;
|
||||
}
|
||||
|
||||
public void setLineParams(WindowManager.LayoutParams lineParams) {
|
||||
this.lineParams = lineParams;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,26 @@
|
||||
package com.auto.autoclicker;
|
||||
|
||||
public class SlideMultipleEvent extends Event {
|
||||
public int startX;
|
||||
public int startY;
|
||||
public int endX;
|
||||
public int endY;
|
||||
|
||||
public SlideMultipleEvent(int startX, int startY, int endX, int endY) {
|
||||
super(-1, startX, startY);
|
||||
this.startX = startX;
|
||||
this.startY = startY;
|
||||
this.endX = endX;
|
||||
this.endY = endY;
|
||||
}
|
||||
|
||||
public SlideMultipleEvent(int id, int startX, int startY, int endX, int endY) {
|
||||
super(id, startX, startY);
|
||||
this.startX = startX;
|
||||
this.startY = startY;
|
||||
this.endX = endX;
|
||||
this.endY = endY;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user