做过Unity的都知道,unity关于对象有一整套完善的事件函数,在使用时,这些方法是需要挂在目标对象上的,如下:
unity自己的: onmousedown onmouseup onmousedrag
ngui: ondragstart ondragend ondrag onclick onpress
那么在Android开发中也有自己的一套事件函数,这个函数是被封装在SimpleOnGestureListener这个类中
具体使用如下:
下面是界面的代码:
<RelativeLayout 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: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" >
<TextView
android:id="@+id/tv01"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="#001100"
android:text="@string/hello_world" />
</RelativeLayout>
下面是Activity代码:
package com.example.tiantian;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.GestureDetector;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.GestureDetector.OnGestureListener;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity implements OnTouchListener {
GestureDetector gd;
TextView tv01;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv01 = (TextView) this.findViewById(R.id.tv01);
gd = new GestureDetector(this, new mysimpleGestureListener());
tv01.setOnTouchListener(this);
}
class mysimpleGestureListener extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
Log.i("zhouwa", "z d h h");
// TODO 自动生成的方法存根
return super.onScroll(e1, e2, distanceX, distanceY);
}
}
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
// TODO 自动生成的方法存根
//Log.i("zhouwa","kaikaikai");
gd.onTouchEvent(arg1);
return true; //这个地方要设为true,否则GestureDetector事件可能不会被触发
}
}
使用思路很简单,就3步:
1 对目标对象做Touch监听 如: tv01.setOnTouchListener(this);
2 创建一个GestureDetector对象,根据需要选择性的实现SimpleOnGestureListener类 中的方法
3 在onTouch方法中将手势事件传给GestureDetector对象:
onScroll : 拖且动
onSingleTapUp : 单击松开
onShowPress : 长按
onFling : 手指一滑
FR:徐海涛(Hunk Xu)