在公司的时候正好在看手势处理的部分,所以自己也想学学,经过一番摸索和查找,终于大概了解了一下基本常识,先记下来慢慢深入吧!
一、写一个Activity实现 android.view.GestureDetector.onGestureListener接口
public class GestureActivity extends Activity implements OnGestureListener()
{}
二、实现里面的接口方法
例如onDown()、onFling()、onLongPress()、onScroll()、onShowPress()、onSingleTapUp()等。
三、定义一个GestureDetector对象
GestureDetector mGestureDetector = new GestureDetector(this);
四、多实现一个onTouchEvent()方法,可以侦测支持的手势
public boolean onTouchEvent( MotionEvent event )
{
return this.mGestureDetector.onTouchEvent( event );
}
五、在“三”中实现的方法中可以自己定义一些动作的实现,以完成需要的功能。
六、附上一个简单的例子,实现向左滑动的时候文本变成“LEFT”,向右滑动的时候文本变成“Right”。
package com.vampirecarter;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.PowerManager;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.OnGestureListener;
import android.widget.TextView;
import android.widget.Toast;
public class GestureActivity extends Activity implements OnGestureListener
{
PowerManager.WakeLock wl;
private GestureDetector mGestureDetector;
private TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
createWakeLock();
mGestureDetector = new GestureDetector(this);
tv = (TextView)findViewById(R.id.tv);
}
public synchronized void createWakeLock()
{
if(wl == null)
{
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "WakeLockActivity");
wl.setReferenceCounted(false);
}
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
//Toast.makeText(WakeLockActivity.this, "Down", Toast.LENGTH_SHORT).show();
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
if (e1.getX() - e2.getX() > 50 && Math.abs(velocityX) > 50)
{
// Fling left
//Toast.makeText(WakeLockActivity.this, "Left", Toast.LENGTH_SHORT).show();
tv.setText("LEFT");
}
else if (e2.getX() - e1.getX() > 50 && Math.abs(velocityX) > 50)
{
// Fling right
//Toast.makeText(WakeLockActivity.this, "Right", Toast.LENGTH_SHORT).show();
tv.setText("RIGHT");
}
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return this.mGestureDetector.onTouchEvent(event);
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
}