有关用安卓系统的产品,控制电脑,触摸板功能的实现,安卓端

首先,先声明一下,我用的传输协议是UDP传输,当然就是跟电脑端那边定义好字节码,然后通过某一个操作,发送哪一个指令,进行对电脑端的控制,这个当然也是pc端的人该做的事情

那么先说一下android端吧。

首先,我们要实现一个触摸板的功能,意思就是说,我们要在手机上实现一个功能,这个功能就类似于我们的电脑的触摸板一样,在你触发某一个点的时候,在电脑上,相应的就会出现你鼠标对应的位置,从而来控制你鼠标的移动

首先,我们需要定义一个view,这个view是什么都行,我用的就是ImageVIew,这个触摸板其实就是一个图片,而我操控这个电脑,就需要在这个图片上进行一系列的操作即可!

首先,我们要明白一件事情,就是,你操控电脑端,想跟鼠标一样的,能实现点击,能实现滑动效果的,就需要你用到onTouch事件和OnClick事件,这两种,所以,对于这个view,我们就要监听他的哦你Touch事件和onClick事件,在OnTouch事件中,去实现他的onClick事件

然后,在实现这个OnClick事件时,我们会用到OnTouch事件中的三个方法,MotionEvent.ACTION_DOWN,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_UP

这三个方法分别是鼠标或者手指按下,移动,起来的监听

在你鼠标按下的时候,获取他的坐标点,

<span style="white-space:pre">				</span>x = event.getX();
				y = event.getY();
				downX = Math.round(x);
				downY = Math.round(y);
一定要记住,这里要将获取到的坐标点定义成全局的,还有一点要注意,我们通过get方式获取到的坐标点其实他是float类型的,你这样强转成int类型的是不可以的,所以,我们只能把它通过round方法,专成int类型的,当然你也可以通过截取小数点的方式,方式很多,就不一一举例了

获取到鼠标按下的时候,获取到了坐标点,然后,我们接下来做的事情就是move方法了,就是移动的时候

鼠标移动的时候,我们要做的同样也是要获取他的坐标点,因为,我们要计算出他移动的位移来,然后把它移动的这个距离发动给电脑端,然后才能让鼠标跟随你手指的移动而移动

同样的方法,获取到x,y的大小,坐标轴

	float Mx = event.getX();
				float My = event.getY();
				float MoveX = Mx - x;
				float MoveY = My - y;
				int RMX = Math.round(MoveX);
				int RMY = Math.round(MoveY);
				/**
<span style="white-space:pre">				</span>发送指令
<span style="white-space:pre">				</span>*/
				x = Mx;
				y = My;
在我们发送完指令之后,要将移动的上一个点的坐标赋值给之前的x,y然后才能保证当移动到下一个点的时候,不至于鼠标点一直在那里不动,因为他的坐标点是在变化的

这样,就可以实现鼠标的移动了

当然,我们还有一个up,就是鼠标起来的时候,需要做一些操作

其实,当鼠标起来的时候,我们本身是不需要进行操作的,但是如果用户想点击这个东西,并且打开他,你不能让他去点击左键啊,所以,我们就需要获取到up事件

我们需要获取up时候得到的x,y,并用他减去你down时候获取到的x,y,通过计算,如果x轴的距离少于三,并且y轴的距离少于三的话,那我们就认为他是在触发点击事件了

x = event.getX();
				y = event.getY();
				upX = Math.round(x);
				upY = Math.round(y);
				int sizeX = upX - downX;
				int sizeY = upY - downY;
				if (sizeX < 3 && sizeY < 3) {
					/**
<span style="white-space:pre">					</span>发送指令
<span style="white-space:pre">					</span>*/
				}
			}
至于那个指令么,就贴出一段让大家看一下吧,其实这个东西,主要还是在pc端需要定义好这些东西,而我们只负责通过协议进行发送即可

	String sendMouseCommand = HHAppCommandEntity.getMouseCommand(
						HHAppCommandEntity.MOVE, RMX, RMY);
				HHRequestProxy.getInstance().sendMessage(sendMouseCommand);
这是移动的时候发送的指令

public static String getMouseCommand(int flag, int x, int y) {
		JSONObject anno = new JSONObject();
		JSONObject mouse = new JSONObject();
		try {
			mouse.put("flag", flag);
			mouse.put("x", x);
			mouse.put("y", y);

			anno.put("type", SYSTEM_TYPE);
			anno.put("action", MOUSE_ACTION);
			anno.put("data", mouse);
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return anno.toString();
	}


这个就是我们获取这个指令的方法,将pc需要的数据,给存放到一个对象中去了

然后通过sendMessage将这个指令发送出去

public void sendMessage(String data) {
		IpMsgInterface.senMessage(serverIP, data);
	}

至此,就可以完成整个触摸板的移动点击了!


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值