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);
        }

posted @ 2012-02-27 17:32  Randy_1989  阅读(439)  评论(0)    收藏  举报