为了实现无线鼠标,需要识别出用户在手机屏幕上的滑动动作,这就需要用到GestureDetector类。

首先是activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginRight="20dp"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><Buttonandroid:id="@+id/btn_options"style="?android:attr/buttonStyleSmall"android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_weight="1"android:text="设置" /><Buttonandroid:id="@+id/btn_connect"style="?android:attr/buttonStyleSmall"android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_weight="1"android:text="连接" /></LinearLayout><TextViewandroid:id="@+id/txt_mouse"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginBottom="5dp"android:layout_marginTop="5dp"android:text="鼠标灵敏度:" /><SeekBarandroid:id="@+id/skb_mouse"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:max="400"android:progress="100" /><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content" ><Buttonandroid:id="@+id/btn_left"style="?android:attr/buttonStyleSmall"android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_weight="1"android:text="左键" /><Buttonandroid:id="@+id/btn_right"style="?android:attr/buttonStyleSmall"android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_weight="1"android:text="右键" /></LinearLayout><TextViewandroid:id="@+id/txt_touch"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1" /><Buttonandroid:id="@+id/btn_keyboard"style="?android:attr/buttonStyleSmall"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center_vertical|center_horizontal"android:text="键盘" /></LinearLayout>

运行后的效果:

中间的空白区即是用户操作鼠标的区域,为了识别用户的动作,定义Mouse_GestureListener类,该类继承自GestureDetector.SimpleOnGestureListener:

class Mouse_GestureListener extends GestureDetector.SimpleOnGestureListener{@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {MainActivity.dis_x = e2.getX()-e1.getX();MainActivity.dis_y = e2.getY()-e1.getY();// 移动距离是否足够if ((float)Math.pow((Math.pow(MainActivity.dis_x,2)+Math.pow(MainActivity.dis_y,2)),0.5)              >MainActivity.dis_t){MainActivity.dis_x *= MainActivity.move_times;MainActivity.dis_y *= MainActivity.move_times;             MainActivity.send_thread.set_str(MainActivity.df2.format(MainActivity.dis_x)+                  "/"+MainActivity.df2.format(MainActivity.dis_y));}         return true;}

onFling(MotionEvent e1, MotionEvent e2, float velocityX,  float velocityY)即手指在屏幕上滑动时的事件,e1是第一个点,e2是第二个点,计算这两个点的x坐标和y坐标之差,就是这次滑动在x轴和y轴上移动的距离,并且将计算出来的距离乘以鼠标灵敏度,交给发送线程发送给Windows端。

在MainActivity类中定义:

GestureDetector gd;

在onCreate(Bundle savedInstanceState)方法中加上一句:

gd = new GestureDetector(this, new Mouse_GestureListener());

还要在MainActivity类中定义方法

  public boolean onTouchEvent(MotionEvent event) { if (gd.onTouchEvent(event)) return true; elsereturn false; }

这样,就可以识别出用户在手机屏幕上操作鼠标的动作,并且发送给Windows端。

转载于:https://www.cnblogs.com/mstk/p/3451285.html

基于TCP和多线程实现无线鼠标键盘-GestureDetector相关推荐

  1. 基于TCP和多线程实现无线鼠标键盘-Socket(1)

    把手机作为移动鼠标.键盘使用非常方便,本文将实现这一功能.该应用分为两部分:Windows服务端和Android客户端. 本文源代码的下载地址:http://download.csdn.net/det ...

  2. 基于TCP和多线程实现无线鼠标键盘-Socket(2)

    在(1)中,实现了Windows服务端与Android客户端的连接,本节将实现在Windows服务端与Android客户端之间传递数据. Android客户端的发送线程SendThread.java代 ...

  3. c语言tcp多线程聊天,基于tcp和多线程的多人聊天室-C语言

    之前在学习关于网络tcp和多线程的编程,学了知识以后不用一下总绝对心虚,于是就编写了一个基于tcp和多线程的多人聊天室. 具体的实现过程: 服务器端:绑定socket对象->设置监听数-> ...

  4. Qt基于tcp网络服务器的简易版多人贪吃蛇小游戏(多线程)

    文章目录 前言 一.项目的简单介绍 二.总体步骤 1.服务器端 2 客户端 总结 前言 花费一周的时间,搭建了一个自己的破烂服务器,以此记录我那逝去的时间 一.项目的简单介绍 这是一个多人贪吃蛇游戏, ...

  5. socket网络编程 java_Java Web 基础(一) 基于TCP的Socket网络编程

    一.Socket简单介绍 Socket通信作为Java网络通讯的基础内容,集中了异常.I/O流模式等众多知识点.学习Socket通信,既能够了解真正的网络通讯原理,也能够增强对I/O流模式的理解. 1 ...

  6. Java Socket编程 - 基于TCP方式的二进制文件传输【转】http://blog.csdn.net/jia20003/article/details/8248221...

    此人博客挺好的,推荐一个! 一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实 ...

  7. Java Socket编程 - 基于TCP方式的二进制文件传输

    一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实现主要功能有以下几点: 1. ...

  8. android 网络通信方式,Android中基于TCP协议的网络通信

    一.Android网络简介 Android与服务器的通信方式主要有两种,一种是Http通信,另一种是Socket通信. HTTP通信:Android中内置HttpClient,这样可以发方便的发送Ht ...

  9. JAVA Socket 底层是怎样基于TCP/IP 实现的???

    首先必须明确:TCP/IP模型中有四层结构:       应用层(Application Layer).传输层(Transport  Layer).网络层(Internet Layer  ).链路层( ...

最新文章

  1. 最大数值(不能使用比较运算符)
  2. 用c语言 编写桌面应用程序,谁能帮我用C语言编写“动态桌面啊”!!!急呀!!!...
  3. 上万家物联网公司会被“政策死”吗
  4. python 矩形补正方形
  5. 头插法和尾插法分别建立链表(复制即可应用)
  6. STM32合并烧录IAP+APP
  7. 美团外卖订单系统演进
  8. 计算机程序员的英文简历,电脑程序员个人英文简历范文
  9. vba msgbox html 标签,vba msgbox 换行
  10. 提高计算机系统速度的相关技术,提高计算机运行速度的几种措施
  11. android短信uri,Android开发,URI 如:发短信,发彩信,调用通讯录等
  12. Java学习总结第一阶段
  13. 2-44钟静雯_day05
  14. 币圈炒币只有四种人能赚到钱其中之一是使用炒币机器人的玩家
  15. 数组(一维数组与二维数组)
  16. VIDEO-DXGKRNL-FATAL-ERROR
  17. 小白都能懂的 玩转docker系列之 Docker网络详解(超详细)
  18. Java后端简历中的项目经验,斩获offer
  19. 一张图数字孪生北京大兴机场
  20. JavaScript 中的内置对象——0606、0607笔记整理

热门文章

  1. python中单行注释_Python中的单行、多行、中文注释方法
  2. intelliJ Idea 添加 Tomcat部署(详细步骤)
  3. ai边缘平滑_AI基础教程113:“效果”菜单之“画笔描边”(一)喷溅效果
  4. vue 前端显示图片加token_前端Vue3.0:从0到1手把手撸码搭建管理后台系统
  5. 计算平均指令时间_为什么向量化计算(vectorization)会这么快?
  6. 在计算机上收回光驱快捷键,如何使用Windows键盘快捷键打开光盘驱动器
  7. 计算机微课应用报告书,【计算机专业论文】计算机专业教学中微课的应用(共4253字)...
  8. PCB板上的“特殊焊盘”到底起什么作用?
  9. datax 导入数据中文乱码_浅谈数据同步之道
  10. verilog驱动ADC0809包括仿真测试