Android GustureDetector手势 Demo
package mystyle.com;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnTouchListener;
public class GustureView extends SurfaceView implements SurfaceHolder.Callback,Runnable,OnGestureListener ,OnTouchListener{
String str="test str.";
Paint paint;
Thread td = new Thread(this);
Canvas canvas;
SurfaceHolder holder;
GestureDetector gd;
Bitmap bmp;
boolean ischange;
public GustureView(Context context) {
super(context);
// TODO Auto-generated constructor stub
setKeepScreenOn(true);
setFocusable(true);
setFocusableInTouchMode(true);
this.setLongClickable(true); //一定要设置不然侦测不到
//setIsLong..
gd = new GestureDetector(this);
/// gd.isLongpressEnabled(); //默认为是的
holder = this.getHolder();
holder.addCallback(this);
this.setOnTouchListener(this);
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED); System.out.println("g构造函数");
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.himi_dream);
}
private void draw(){
canvas = holder.lockCanvas();
if(canvas!=null){ //防止按下home back失去对象
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(bmp, 0, 0,paint);
//paint.setColor(Color.RED);
canvas.drawText(str, 100, 100, paint);
}
holder.unlockCanvasAndPost(canvas);
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
str = "快速滑动";
ischange =!ischange;
if(ischange){
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.himi_warm);
}else{
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.himi_dream);
}
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
str = "长按不滑动";
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
str = "慢速滑动";
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
str = "短按不滑动";
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
str = "短按 action up ,action down";
return false;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
System.out.println("thread start");
td.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try{System.out.println("caocao");
draw();
}catch(Exception ex){
Log.v("style ", "has error with programe..");
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return gd.onTouchEvent(event);
}
}
package mystyle.com;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnTouchListener;
public class GustureView extends SurfaceView implements SurfaceHolder.Callback,Runnable,OnGestureListener ,OnTouchListener{
String str="test str.";
Paint paint;
Thread td = new Thread(this);
Canvas canvas;
SurfaceHolder holder;
GestureDetector gd;
Bitmap bmp;
boolean ischange;
public GustureView(Context context) {
super(context);
// TODO Auto-generated constructor stub
setKeepScreenOn(true);
setFocusable(true);
setFocusableInTouchMode(true);
this.setLongClickable(true); //一定要设置不然侦测不到
//setIsLong..
gd = new GestureDetector(this);
/// gd.isLongpressEnabled(); //默认为是的
holder = this.getHolder();
holder.addCallback(this);
this.setOnTouchListener(this);
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED); System.out.println("g构造函数");
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.himi_dream);
}
private void draw(){
canvas = holder.lockCanvas();
if(canvas!=null){ //防止按下home back失去对象
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(bmp, 0, 0,paint);
//paint.setColor(Color.RED);
canvas.drawText(str, 100, 100, paint);
}
holder.unlockCanvasAndPost(canvas);
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
str = "快速滑动";
ischange =!ischange;
if(ischange){
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.himi_warm);
}else{
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.himi_dream);
}
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
str = "长按不滑动";
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
str = "慢速滑动";
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
str = "短按不滑动";
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
str = "短按 action up ,action down";
return false;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
System.out.println("thread start");
td.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try{System.out.println("caocao");
draw();
}catch(Exception ex){
Log.v("style ", "has error with programe..");
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return gd.onTouchEvent(event);
}
}
//在SurfaceView中要响应GuestureDetector中相关事件,需要注意几点
1,设置setFocusableInTouchMode(true);
this.setLongClickable(true); //一定要设置不然侦测不到
2,onTouchEvent 中最后返回的是 GuestureEvent中处理的事件
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return gd.onTouchEvent(event);
}

浙公网安备 33010602011771号