diff --git a/app/src/main/java/com/auto/autoclicker/AutoClickService.java b/app/src/main/java/com/auto/autoclicker/AutoClickService.java index 5018d3c..30ffdf8 100644 --- a/app/src/main/java/com/auto/autoclicker/AutoClickService.java +++ b/app/src/main/java/com/auto/autoclicker/AutoClickService.java @@ -22,27 +22,66 @@ public class AutoClickService extends AccessibilityService { private static final String TAG = "AutoClickService"; private static AutoClickService instance; - private final List moreClickPositions = new ArrayList<>(); - private int currentClickIndex = 0; - private static final long MIN_CLICK_INTERVAL = 40; private static final long MAX_CLICK_INTERVAL = 10000; private static final int MIN_CLICK_DURATION = 50; private static final int MAX_CLICK_DURATION = 1000; + 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 eventQueue = new ArrayList<>(); private final Handler handler = new Handler(Looper.getMainLooper()); - private boolean isClicking = false; + private boolean isRunning = false; - private int clickX = 500; - private int clickY = 500; private long clickInterval = 1000; private int clickDuration = 200; + private int slideDuration = 500; private int screenWidth; private int screenHeight; - - private final List slideEvents = new ArrayList<>(); private int currentEventIndex = 0; - private int slideDuration = 500; // 新增:滑动时长 @Override public void onCreate() { @@ -72,22 +111,48 @@ public class AutoClickService extends AccessibilityService { public void setClickPosition(float x, float y) { Point constrained = ViewUtils.constrainToScreen(x, y, screenWidth, screenHeight); - this.moreClickPositions.clear(); - this.clickX = constrained.x; - this.clickY = constrained.y; - logDebug("设置单点点击位置: 原始 (" + x + ", " + y + ") -> 修正 (" + clickX + ", " + clickY + ")"); + clearEvents(); + eventQueue.add(new ClickEvent(constrained.x, constrained.y, -1)); + logDebug("设置单点点击位置: 原始 (" + x + ", " + y + ") -> 修正 (" + constrained.x + ", " + constrained.y + ")"); } - public void setMoreClickPositions(List positions) { - this.moreClickPositions.clear(); - this.moreClickPositions.addAll(positions); - logDebug("设置多点点击位置: " + positions.size() + " 个点"); + public void clearEvents() { + eventQueue.clear(); + logDebug("清除所有事件"); } - public void setSlideEvents(List slides) { - this.slideEvents.clear(); - this.slideEvents.addAll(slides); - logDebug("设置滑动事件: " + slides.size() + " 个"); + public void addClickEvent(int x, int y, int index) { + Point constrained = ViewUtils.constrainToScreen(x, y, screenWidth, screenHeight); + eventQueue.add(new ClickEvent(constrained.x, constrained.y, index)); + logDebug("添加点击事件 #" + index + ": (" + constrained.x + ", " + constrained.y + ")"); + } + + public void addMultipleClickEvents(List positions) { + clearEvents(); + for (int i = 0; i < positions.size(); i++) { + Point p = positions.get(i); + addClickEvent(p.x, p.y, i); + } + logDebug("设置多点点击事件: " + positions.size() + " 个点"); + } + + public void addSlideEvent(int startX, int startY, int endX, int endY) { + Point constrainedStart = ViewUtils.constrainToScreen(startX, startY, screenWidth, screenHeight); + Point constrainedEnd = ViewUtils.constrainToScreen(endX, endY, screenWidth, screenHeight); + + eventQueue.add(new SlideEvent( + constrainedStart.x, constrainedStart.y, + constrainedEnd.x, constrainedEnd.y)); + + logDebug("添加滑动事件: 从 (" + constrainedStart.x + ", " + constrainedStart.y + + ") 到 (" + constrainedEnd.x + ", " + constrainedEnd.y + ")"); + } + + public void addMultipleSlideEvents(List slides) { + for (Slide slide : slides) { + addSlideEvent((int) slide.startX, (int) slide.startY, (int) slide.endX, (int) slide.endY); + } + logDebug("添加多个滑动事件: " + slides.size() + " 个"); } public void setClickInterval(long interval) { @@ -108,33 +173,55 @@ public class AutoClickService extends AccessibilityService { logDebug("设置点击时长: " + duration + "ms"); } + public void setSlideDuration(int duration) { + if (duration < MIN_SLIDE_DURATION || duration > MAX_SLIDE_DURATION) { + Log.w(TAG, "滑动时长超出范围: " + duration + "ms"); + return; + } + this.slideDuration = duration; + logDebug("设置滑动时长: " + duration + "ms"); + } + public void startClicking() { - if (!isClicking) { - if (moreClickPositions.isEmpty() && slideEvents.isEmpty() && (clickX == 0 && clickY == 0)) { - Log.w(TAG, "无有效点击或滑动事件,忽略开始"); + if (!isRunning) { + if (eventQueue.isEmpty()) { + Log.w(TAG, "无事件队列,忽略开始"); return; } - isClicking = true; + isRunning = true; currentEventIndex = 0; - logDebug("开始自动点击/滑动"); - performEvent(); + logDebug("开始执行事件队列 - 共 " + eventQueue.size() + " 个事件"); + executeNextEvent(); } } public void stopClicking() { - if (isClicking) { - isClicking = false; + if (isRunning) { + isRunning = false; handler.removeCallbacksAndMessages(null); - logDebug("停止自动点击/滑动"); + logDebug("停止执行事件"); } } public boolean isClicking() { - return isClicking; + return isRunning; } - private void performClick(Point clickPoint, int index) { + private void executeNextEvent() { + if (!isRunning || eventQueue.isEmpty()) { + logDebug("跳过执行:服务未运行或事件队列为空"); + return; + } + + Event event = eventQueue.get(currentEventIndex); + event.perform(); + + // 准备下一个事件 + currentEventIndex = (currentEventIndex + 1) % eventQueue.size(); + } + + private void performSingleClick(Point clickPoint, int index) { logDebug("执行点击: (" + clickPoint.x + ", " + clickPoint.y + ")"); flashTouchFeedback(index); @@ -149,63 +236,24 @@ public class AutoClickService extends AccessibilityService { @Override public void onCompleted(GestureDescription gestureDescription) { logDebug("点击完成"); - if (isClicking) { - handler.postDelayed(() -> performEvent(), clickInterval); + if (isRunning) { + handler.postDelayed(() -> executeNextEvent(), clickInterval); } } @Override public void onCancelled(GestureDescription gestureDescription) { Log.e(TAG, "点击被取消"); - if (isClicking) { - handler.postDelayed(() -> performEvent(), clickInterval + 300); + if (isRunning) { + handler.postDelayed(() -> executeNextEvent(), clickInterval + 300); } } }, null); } - private void performEvent() { - if (!isClicking) { - logDebug("跳过事件:服务未处于运行中"); - return; - } - - if (moreClickPositions.isEmpty() && slideEvents.isEmpty()) { - if (clickX != 0 || clickY != 0) { - // 单点模式 - performClick(new Point(clickX, clickY), -1); - return; - } - stopClicking(); - return; - } - - // 多点模式:按事件队列顺序执行 - int pointIndex = 0; - int slideIndex = 0; - for (int i = 0; i <= currentEventIndex; i++) { - if (pointIndex < moreClickPositions.size() && i == pointIndex) { - pointIndex++; - } else if (slideIndex < slideEvents.size()) { - slideIndex++; - } - } - - if (pointIndex > currentEventIndex) { - // 执行点击 - Point clickPoint = moreClickPositions.get(pointIndex - 1); - performClick(clickPoint, pointIndex - 1); - } else if (slideIndex > currentEventIndex) { - // 执行滑动 - Slide slide = slideEvents.get(slideIndex - 1); - performSlide(slide); - } - - currentEventIndex = (currentEventIndex + 1) % (moreClickPositions.size() + slideEvents.size()); - } - - private void performSlide(Slide slide) { - logDebug("执行滑动: 从 (" + slide.startX + ", " + slide.startY + ") 到 (" + slide.endX + ", " + slide.endY + ")"); + private void performSingleSlide(SlideEvent slide) { + logDebug("执行滑动: 从 (" + slide.startX + ", " + slide.startY + + ") 到 (" + slide.endX + ", " + slide.endY + ")"); Path path = new Path(); path.moveTo(slide.startX, slide.startY); @@ -219,16 +267,16 @@ public class AutoClickService extends AccessibilityService { @Override public void onCompleted(GestureDescription gestureDescription) { logDebug("滑动完成"); - if (isClicking) { - handler.postDelayed(() -> performEvent(), clickInterval); + if (isRunning) { + handler.postDelayed(() -> executeNextEvent(), clickInterval); } } @Override public void onCancelled(GestureDescription gestureDescription) { Log.e(TAG, "滑动被取消"); - if (isClicking) { - handler.postDelayed(() -> performEvent(), clickInterval + 300); + if (isRunning) { + handler.postDelayed(() -> executeNextEvent(), clickInterval + 300); } } }, null); @@ -236,12 +284,13 @@ public class AutoClickService extends AccessibilityService { private void flashTouchFeedback(int index) { Intent intent = new Intent("com.auto.autoclicker.FLASH_TOUCH_POINT"); - intent.putExtra("index", index); // 带上当前点击点的index + intent.putExtra("index", index); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); } @Override public void onAccessibilityEvent(AccessibilityEvent event) { + // 不需要处理辅助功能事件 } private void logDebug(String message) { diff --git a/app/src/main/java/com/auto/autoclicker/FloatingViewManager.java b/app/src/main/java/com/auto/autoclicker/FloatingViewManager.java index 28cbe02..720dbaa 100644 --- a/app/src/main/java/com/auto/autoclicker/FloatingViewManager.java +++ b/app/src/main/java/com/auto/autoclicker/FloatingViewManager.java @@ -20,8 +20,10 @@ import android.view.View; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; +import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AlertDialog; @@ -43,10 +45,12 @@ public class FloatingViewManager { private final WindowManager windowManager; - private final List moreTouchPointViews = new ArrayList<>(); + private int touchPointNumber = 1; // 默认数字 + + private final List moreTouchPointViews = new ArrayList<>(); private final List moreTouchPointParams = new ArrayList<>(); - private View singleTouchPointView; + private TextView singleTouchPointView; private WindowManager.LayoutParams singleTouchPointParams; private LinearLayout singleControlBarView; @@ -122,9 +126,16 @@ public class FloatingViewManager { logDebug("悬浮窗已添加,模式 = " + mode); } + @SuppressLint("ClickableViewAccessibility") private void initSingleTouchPointView() { - singleTouchPointView = new View(context); + singleTouchPointView = new TextView(context); + singleTouchPointView.setBackgroundResource(R.drawable.un_touch_point); + singleTouchPointView.setGravity(Gravity.CENTER); // 文字居中 + singleTouchPointView.setText("1"); // 设置初始数字 + singleTouchPointView.setTextColor(Color.BLACK); // 数字颜色 + singleTouchPointView.setTextSize(16); // 数字大小(可调整) + singleTouchPointParams = new WindowManager.LayoutParams( 100, 100, Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? @@ -134,6 +145,7 @@ public class FloatingViewManager { WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, PixelFormat.TRANSLUCENT ); + singleTouchPointParams.gravity = Gravity.TOP | Gravity.START; singleTouchPointParams.x = (int) touchPointX; singleTouchPointParams.y = (int) touchPointY; @@ -144,6 +156,15 @@ public class FloatingViewManager { @Override public boolean onTouch(View v, MotionEvent event) { + if (isClicking) { + // 拖动禁用时,仅处理点击 + if (event.getAction() == MotionEvent.ACTION_UP) { + v.performClick(); + return true; + } + return false; + } + switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = event.getRawX(); @@ -172,6 +193,7 @@ public class FloatingViewManager { moreTouchPointParams.clear(); eventQueue.clear(); // 清空事件队列 eventIdCounter = 1; // 重置编号 + touchPointNumber = 1; } @SuppressLint("ClickableViewAccessibility") @@ -197,6 +219,15 @@ public class FloatingViewManager { @Override public boolean onTouch(View v, MotionEvent event) { + if (isClicking) { + // 拖动禁用时,仅处理点击 + if (event.getAction() == MotionEvent.ACTION_UP) { + v.performClick(); + return true; + } + return false; + } + switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = event.getRawX(); @@ -249,6 +280,15 @@ public class FloatingViewManager { @Override public boolean onTouch(View v, MotionEvent event) { + if (isMoreClicking) { + // 拖动禁用时,仅处理点击 + if (event.getAction() == MotionEvent.ACTION_UP) { + v.performClick(); + return true; + } + return false; + } + switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = event.getRawX(); @@ -340,37 +380,6 @@ public class FloatingViewManager { LocalBroadcastManager.getInstance(context).sendBroadcast(intent); } -// private void toggleMoreClicking() { -// if (isDebounced()) return; -// -// AutoClickService service = AutoClickService.getInstance(); -// if (service == null) { -// Log.e(TAG, "AutoClickService 未初始化"); -// Toast.makeText(context, "请在设置中启用无障碍服务", Toast.LENGTH_LONG).show(); -// Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS); -// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); -// context.startActivity(intent); -// return; -// } -// -// if (moreTouchPointViews.isEmpty()) { -// Toast.makeText(context, "请先添加触摸点", Toast.LENGTH_SHORT).show(); -// return; -// } -// -// if (isMoreClicking) { -// service.stopClicking(); -// Toast.makeText(context, "停止多点点击", Toast.LENGTH_SHORT).show(); -// } else { -// service.setMoreClickPositions(getMoreTouchPositions()); -// service.startClicking(); -// Toast.makeText(context, "开始多点点击", Toast.LENGTH_SHORT).show(); -// } -// -// isMoreClicking = !isMoreClicking; -// logDebug("多点服务是否点击中: " + service.isClicking()); -// } - private void toggleMoreClicking() { if (isDebounced()) return; @@ -396,92 +405,35 @@ public class FloatingViewManager { point.setBackgroundResource(R.drawable.un_touch_point); } } else { - service.setMoreClickPositions(getMoreTouchPositions()); - service.setSlideEvents(getSlideEvents()); + service.addMultipleClickEvents(getMoreTouchPositions()); + service.addMultipleSlideEvents(getSlideEvents()); service.startClicking(); Toast.makeText(context, "开始多点点击", Toast.LENGTH_SHORT).show(); + for (View point : moreTouchPointViews) { + point.setBackgroundResource(R.drawable.touch_point); + } } isMoreClicking = !isMoreClicking; logDebug("多点服务是否点击中: " + service.isClicking()); } - private void addMoreTouchPoint() { - View point = new View(context); - point.setBackgroundResource(R.drawable.un_touch_point); - - WindowManager.LayoutParams params = new WindowManager.LayoutParams( - 100, 100, - Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? - WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY : - WindowManager.LayoutParams.TYPE_PHONE, - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | - WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, - PixelFormat.TRANSLUCENT - ); - - params.gravity = Gravity.TOP | Gravity.START; - params.x = screenWidth / 2 - 50; - params.y = screenHeight / 2 - 50; - - point.setOnTouchListener(new View.OnTouchListener() { - private float lastX, lastY; - private float paramX, paramY; - - @Override - public boolean onTouch(View v, MotionEvent event) { - int index = moreTouchPointViews.indexOf(v); // 获取当前触摸点索引 - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - lastX = event.getRawX(); - lastY = event.getRawY(); - paramX = params.x; - paramY = params.y; - return true; - case MotionEvent.ACTION_MOVE: - float dx = event.getRawX() - lastX; - float dy = event.getRawY() - lastY; - Point constrainedPoint = ViewUtils.constrainToScreen( - paramX + dx, paramY + dy, - screenWidth - point.getWidth(), screenHeight - point.getHeight()); - params.x = constrainedPoint.x; - params.y = constrainedPoint.y; - windowManager.updateViewLayout(point, params); - - // 更新 moreTouchPointParams - if (index >= 0 && index < moreTouchPointParams.size()) { - moreTouchPointParams.set(index, params); - } - - // 收集所有触摸点位置 - List points = new ArrayList<>(); - for (WindowManager.LayoutParams p : moreTouchPointParams) { - points.add(new Point(p.x, p.y)); - } - - // 更新 AutoClickService 的 moreClickPositions - AutoClickService service = AutoClickService.getInstance(); - if (service != null) { - service.setMoreClickPositions(points); - } - - return true; - case MotionEvent.ACTION_UP: - v.performClick(); - return true; - } - return false; - } - }); - - windowManager.addView(point, params); - moreTouchPointViews.add(point); - moreTouchPointParams.add(params); - } - + @SuppressLint("ClickableViewAccessibility") private void addPointEvent() { - View point = new View(context); + if (isMoreClicking) { + Toast.makeText(context, "请先停止点击", Toast.LENGTH_SHORT).show(); + return; + } + + TextView point = new TextView(context); + point.setBackgroundResource(R.drawable.un_touch_point); + point.setGravity(Gravity.CENTER); // 文字居中 + point.setText(String.valueOf(touchPointNumber)); // 设置初始数字 + point.setTextColor(Color.BLACK); // 数字颜色 + point.setTextSize(16); // 数字大小(可调整) + + touchPointNumber++; WindowManager.LayoutParams params = new WindowManager.LayoutParams( 100, 100, @@ -507,6 +459,15 @@ public class FloatingViewManager { @Override public boolean onTouch(View v, MotionEvent event) { + if (isMoreClicking) { + // 拖动禁用时,仅处理点击 + if (event.getAction() == MotionEvent.ACTION_UP) { + v.performClick(); + return true; + } + return false; + } + switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = event.getRawX(); @@ -539,10 +500,22 @@ public class FloatingViewManager { updateServicePositions(); } + @SuppressLint("ClickableViewAccessibility") private void addSlideEvent() { + if (isMoreClicking) { + Toast.makeText(context, "请先停止点击", Toast.LENGTH_SHORT).show(); + return; + } + // 起点 - View startPoint = new View(context); + TextView startPoint = new TextView(context); + startPoint.setBackgroundResource(R.drawable.un_touch_point); + startPoint.setGravity(Gravity.CENTER); // 文字居中 + startPoint.setText(String.valueOf(touchPointNumber)); // 设置初始数字 + startPoint.setTextColor(Color.BLACK); // 数字颜色 + startPoint.setTextSize(16); // 数字大小(可调整) + WindowManager.LayoutParams startParams = new WindowManager.LayoutParams( 100, 100, Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? @@ -558,8 +531,16 @@ public class FloatingViewManager { PointEvent startPointEvent = new PointEvent(eventIdCounter++, startParams.x, startParams.y, startPoint, startParams); // 终点 - View endPoint = new View(context); + TextView endPoint = new TextView(context); + endPoint.setBackgroundResource(R.drawable.un_touch_point); + endPoint.setGravity(Gravity.CENTER); // 文字居中 + endPoint.setText(String.valueOf(touchPointNumber)); // 设置初始数字 + endPoint.setTextColor(Color.BLACK); // 数字颜色 + endPoint.setTextSize(16); // 数字大小(可调整) + + touchPointNumber++; + WindowManager.LayoutParams endParams = new WindowManager.LayoutParams( 100, 100, Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? @@ -605,6 +586,15 @@ public class FloatingViewManager { @Override public boolean onTouch(View v, MotionEvent event) { + if (isMoreClicking) { + // 拖动禁用时,仅处理点击 + if (event.getAction() == MotionEvent.ACTION_UP) { + v.performClick(); + return true; + } + return false; + } + switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = event.getRawX(); @@ -643,6 +633,15 @@ public class FloatingViewManager { @Override public boolean onTouch(View v, MotionEvent event) { + if (isMoreClicking) { + // 拖动禁用时,仅处理点击 + if (event.getAction() == MotionEvent.ACTION_UP) { + v.performClick(); + return true; + } + return false; + } + switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = event.getRawX(); @@ -701,51 +700,20 @@ public class FloatingViewManager { lineView.setPoints(startCenterX, startCenterY, endCenterX, endCenterY); } - private void updateLineView(SlideEvent slideEvent) { - WindowManager.LayoutParams lineParams = slideEvent.lineParams; - PointEvent start = slideEvent.startPoint; - PointEvent end = slideEvent.endPoint; - View lineView = slideEvent.lineView; - - // 计算两点中心位置 - float startCenterX = start.x + 50; // 假设点的宽度为100,中心点坐标为x+50 - float startCenterY = start.y + 50; // 假设点的高度为100,中心点坐标为y+50 - float endCenterX = end.x + 50; - float endCenterY = end.y + 50; - - // 计算两点之间的距离和角度 - float deltaX = endCenterX - startCenterX; - float deltaY = endCenterY - startCenterY; - float distance = (float) Math.sqrt(deltaX * deltaX + deltaY * deltaY); - float angle = (float) Math.toDegrees(Math.atan2(deltaY, deltaX)); - - // 设置连接线的宽度为两点之间的距离 - lineParams.width = (int) distance; - lineParams.height = 5; // 固定高度 - - // 设置连接线的起始位置为起始点的中心 - lineParams.x = (int) startCenterX; - lineParams.y = (int) startCenterY - lineParams.height / 2; // 垂直居中 - - // 由于线条是从左到右绘制的,我们需要设置旋转中心点 - lineView.setPivotX(0); // 设置旋转中心为线条的起点 - lineView.setPivotY(lineParams.height / 2); // 设置旋转中心为线条高度的一半 - - // 设置连接线的旋转角度 - lineView.setRotation(angle); - - // 更新连接线的布局 - windowManager.updateViewLayout(lineView, lineParams); - } - // 新增:移除最后一个事件 private void removeLastEvent() { + if (isMoreClicking) { + Toast.makeText(context, "请先停止点击", Toast.LENGTH_SHORT).show(); + return; + } + if (eventQueue.isEmpty()) { Toast.makeText(context, "没有更多事件可以删除", Toast.LENGTH_SHORT).show(); return; } Event lastEvent = eventQueue.remove(eventQueue.size() - 1); + if (lastEvent instanceof PointEvent) { PointEvent pointEvent = (PointEvent) lastEvent; try { @@ -769,6 +737,9 @@ public class FloatingViewManager { moreTouchPointParams.remove(slideEvent.startPoint.params); moreTouchPointParams.remove(slideEvent.endPoint.params); } + + touchPointNumber--; + updateServicePositions(); } @@ -787,23 +758,8 @@ public class FloatingViewManager { } AutoClickService service = AutoClickService.getInstance(); if (service != null) { - service.setMoreClickPositions(points); - service.setSlideEvents(slides); - } - } - - private void removeMoreTouchPoint() { - if (!moreTouchPointViews.isEmpty()) { - View lastPoint = moreTouchPointViews.get(moreTouchPointViews.size() - 1); - try { - windowManager.removeView(lastPoint); - } catch (Exception e) { - Log.w(TAG, "移除 touchPoint 失败", e); - } - moreTouchPointViews.remove(moreTouchPointViews.size() - 1); - moreTouchPointParams.remove(moreTouchPointParams.size() - 1); - } else { - Toast.makeText(context, "没有更多触摸点可以删除", Toast.LENGTH_SHORT).show(); + service.addMultipleClickEvents(points); + service.addMultipleSlideEvents(slides); } } diff --git a/app/src/main/res/drawable/un_touch_point.xml b/app/src/main/res/drawable/un_touch_point.xml index 8f80d5c..41f4468 100644 --- a/app/src/main/res/drawable/un_touch_point.xml +++ b/app/src/main/res/drawable/un_touch_point.xml @@ -1,9 +1,9 @@ - + android:width="47dp" + android:height="47dp" + android:viewportWidth="47" + android:viewportHeight="47"> + diff --git a/app/src/main/res/layout/more_control_bar.xml b/app/src/main/res/layout/more_control_bar.xml index 3bee0e0..925821e 100644 --- a/app/src/main/res/layout/more_control_bar.xml +++ b/app/src/main/res/layout/more_control_bar.xml @@ -1,6 +1,5 @@