我制作了一个应用程序,可以将安卓手机用作触摸板。它按应有的方式正常工作。但唯一困扰我的是有滞后。笔记本电脑上的鼠标有时会滞后,即与 android 上的触摸不完全同步。
我能想到滞后的唯一原因是用于计算下一个坐标的逻辑。
这是发送触摸事件坐标的Android应用程序代码:(t是TextView)
t.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
startX = event.getX();
startY = event.getY();
}
if(event.getAction() == MotionEvent.ACTION_MOVE)
{
out.println("X:"+(event.getX()-startX)+"Y:"+(event.getY()-startY));
startX=event.getX();
startY=event.getY();
}
return true;
}
});
我使用的逻辑是我发送坐标的差异。在 serverside ,发生的基本事情是('in' 是 BufferedReader ):
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
currX = (int)b.getX();
currY=(int)b.getY();
while ((inputLine = in.readLine()) != null) {
if(inputLine.equals("LeftClick"))
{
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
}
else if(inputLine.equals("RightClick")){
robot.mousePress(InputEvent.BUTTON3_MASK);
robot.mouseRelease(InputEvent.BUTTON3_MASK);
}
else{
outputLine = kkp.processInput(inputLine);
//To break the string into X cordi and Y cordi.
yloc = inputLine.indexOf("Y");
float xcord = Float.parseFloat(inputLine.substring(2,yloc));
float ycord = Float.parseFloat(inputLine.substring(yloc+2));
robot.mouseMove(currX+Math.round(xcord),currY+Math.round(ycord));
currX+=Math.round(xcord);
currY+=Math.round(ycord);
}
}
延迟是否正常,无法改善。或者可以通过更改上述代码中的计算来改进。PS:我没有使用 UDP。