zoukankan      html  css  js  c++  java
  • 基于TCP和多线程实现无线鼠标键盘-GestureDetector

    为了实现无线鼠标,需要识别出用户在手机屏幕上的滑动动作,这就需要用到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" >
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <Button
                android:id="@+id/btn_options"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="设置" />
    
            <Button
                android: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>
    
        <TextView
            android:id="@+id/txt_mouse"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginTop="5dp"
            android:text="鼠标灵敏度:" />
    
        <SeekBar
            android:id="@+id/skb_mouse"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:max="400"
            android:progress="100" />
    
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
    
            <Button
                android:id="@+id/btn_left"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="左键" />
    
            <Button
                android: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>
    
        <TextView
            android:id="@+id/txt_touch"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    
        <Button
            android: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{
    	
    	@Override
    	public 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; 
    		  else
    			  return false; 
    		  
    	 }
    

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

  • 相关阅读:
    js数组删除数组元素!收集
    ComponentArt MethodNeedDataSource etc.
    ComponentArt Grid Tips
    jira的附件位置如何查看
    有空来学习
    给你的windows设置博客园客户端,还等什么呢,赶快行动吧
    需要做的事
    那些事
    转帖:教你怎么偷懒
    买了电脑要做的几件事
  • 原文地址:https://www.cnblogs.com/mstk/p/3451285.html
Copyright © 2011-2022 走看看