android MotionEvent和TouchSlop触摸处理

来源:互联网 发布:网络报纸取代传统报纸 编辑:程序博客网 时间:2024/05/29 17:24

这次介绍MotionEvent和TouchSlop的使用
上一次说了通过MotionEvent得到当前x和y的坐标,这次说一下它显示手指触摸屏幕的状态。
通过MotionEvent能得到触摸滑动的状态,一般使用的是ACTION_UP和ACTION_DOEN和ACTION_MOVE,ACTION_UP指的是手指抬起的状态,ACTION_DOEN手指触摸屏幕的状态,ACTION_MOVE指的是手指在屏幕移动的状态。
TouchSlop:滑动的最小距离,指的是从手指触摸屏幕到手指抬起手指,这两个瞬间的手指所在位置的距离如果小于TouchSlop,系统认为当前的滑动不算数。
上代码演示

public class MyView extends View {    private int x,y,left,right,top,bottom,rawX,rawY,touchslop;    private int startx=0,starty=0,endx=0,endy=0;    private String state="";    public MyView(Context context) {        super(context);        setFocusable(true);        touchslop= ViewConfiguration.get(context).getScaledTouchSlop();    }    @Override protected void onDraw(Canvas canvas) {        Paint paint = new Paint();        paint.setColor(Color.BLACK);        paint.setTextSize(40);        canvas.drawText(" MotionEvent:" + state, 50, 100, paint);        if((Math.abs(startx-endx)*Math.abs(startx-endx)+Math.abs(starty-endy)*Math.abs(starty-endy))>touchslop*touchslop)        canvas.drawText("滑动成功", 50, 200, paint);        else        canvas.drawText("滑动失败", 50, 200, paint);        super.onDraw(canvas);    }    @Override public boolean onKeyDown(int keyCode,KeyEvent event) {        return super.onKeyDown(keyCode, event);    }    @Override public boolean onKeyUp(int keyCode,KeyEvent event) {        return super.onKeyUp(keyCode, event);    }    @Override public boolean onTouchEvent(MotionEvent event) {        if(event.getAction()==MotionEvent.ACTION_DOWN){            state ="ACTION_DOWN";            startx=(int)event.getX();            starty=(int)event.getY();        }        else if(event.getAction()==MotionEvent.ACTION_UP){            state ="ACTION_UP";            endx=(int)event.getX();            endy=(int)event.getY();        }else if(event.getAction()==MotionEvent.ACTION_MOVE){            state ="ACTION_MOVE";        }        invalidate();        return true;    }}public class MainActivity extends AppCompatActivity {    private ListView listview;    private TextView textv;    private MyView view;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        view = new MyView(this);        setContentView(view);    }}

再见。

0 0
原创粉丝点击