搬家后的博客链接: IT客栈 www.itkezhan.org
用到的是 MotionEvent
在我们的 Activity 里面有 onTouchEvent(MotionEvent event); 这个方法
我自己的程序可以通过重写父类Activity的这个方法从而实现获取用户在屏幕上的一些信息,比如 点击 离开屏幕 当前有多少个触点被激活。 各触点的坐标。
废话不多说,直接上源码
MainActivity.java
package com.example.lab;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.EditText;
public class MainActivity extends Activity
{
EditText raw = null;
EditText raw2 = null;
int a = 0;
float startX_1 = 0; //记录第一个触点开始 X 坐标
float startY_1 = 0; //记录第一个触点开始 Y 坐标
float startX_2 = 0; //记录第二个触点开始 X 坐标
float startY_2 = 0; //记录第二个触点开始 Y 坐标
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
raw = (EditText)findViewById(R.id.raw); //显示第一个触点信息的文本框
raw2 = (EditText)findViewById(R.id.raw2); //显示第二个触点信息的文本框
}
@Override
public boolean onTouchEvent(MotionEvent me) //每当屏幕有动作(例如有手指点击,移动)时这个方法被系统调用。即系统会自动调用这个方法,你只需要把想要实现的代码写在方法括号内就可以了
{
switch(me.getActionMasked()) //me.getActionMasked() 获取当前动作类型
{
case MotionEvent.ACTION_DOWN: //如果是第一个触点被按下是执行
startX_1 = me.getX(me.getActionIndex()); //获取第一个触点的 X 坐标
startY_1 = me.getY(me.getActionIndex()); //获取第一个触点的 Y 坐标
setInfo(me,"ACTION_DOWN ", me.getActionIndex()); //这个是我定义的方法,用于设置文本框显示信息
break;
case MotionEvent.ACTION_UP: //如果第一个触点弹起时被触发(手指离开屏幕时)
startX_1 = 0f;
startY_1 = 0f;
setInfo(me,"ACTION_UP ", me.getActionIndex()); //同上
break;
case MotionEvent.ACTION_POINTER_DOWN: //除第一个触点外,其他触点被按下时该方法被触发。
startX_2 = me.getX(me.getActionIndex()); //获取第二个触点的坐标
startY_2 = me.getY(me.getActionIndex()); //获取第二个触点的坐标
setInfo(me,"ACTION_POINTER_DOWN ", me.getActionIndex());
break;
case MotionEvent.ACTION_POINTER_UP: //除第一个触点外,其他触点弹起时该方法被触发。
startX_2 = 0f;
startY_2 = 0f;
setInfo(me,"ACTION_POINTER_UP ", me.getActionIndex());
break;
case MotionEvent.ACTION_MOVE: //当任意一个触点在屏幕移动时被触发
setInfo(me,"ACTION_MOVE ", 0);
break;
}
return true;
}
public void setInfo(MotionEvent m,String Identify, int index)
{
raw.setText(Identify + index + " ******* " + m.getPointerCount() + " Time:" + a++ + "\n\n" + "StartX:" + startX_1 + " CurrentX:" + m.getX(0) + "\n" + "StartY:" + startY_1 + " CurrentY" + m.getY(0));
if(m.getPointerCount() == 2) //当有两个触点时才设置第二个触点信息框的信息
raw2.setText(Identify + index + " ******* " + m.getPointerCount() + " Time:" + a++ + "\n\n" + "StartX:" + startX_2 + " CurrentX:" + m.getX(1) + "\n" + "StartY:" + startY_2 + " CurrentY" + m.getY(1));
}
}
activity_main.xml
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TableRow>
<EditText
android:id="@+id/raw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:layout_weight="1"
/>
</TableRow>
<TableRow>
<EditText
android:id="@+id/raw2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:layout_weight="1"
/>
</TableRow>
<TableRow>
</TableRow>
</TableLayout>
大家可以先把源码拿去执行一下。然后研究一下。 如果有什么疑问,欢迎留言交流。