个人比较健忘,所以前段时间趁空整理了一些简单的demo,以后用着方便。
OnTouch顾名思义就是触摸屏幕事件,各问题代码里解释很详细啦。代码大部分是从网络获取的。
import android.os.Bundle;
import android.app.Activity;
import android.graphics.PointF;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
/**
* OnTouch的简单应用
* @author 枫jk
*
*/
public class MainActivity extends Activity implements OnTouchListener,OnGestureListener {
PointF startPoint;
GestureDetector mGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startPoint=new PointF();
mGestureDetector=new GestureDetector(this);
TextView tv=(TextView) findViewById(R.id.tv_1);
tv.setClickable(true); //不设置这个无法响应ACTION_UP ACTION_MOVE 等事件
tv.setOnTouchListener(this);
}
/*
*
* event.getAction() //获取触控动作比如ACTION_DOWN
event.getPointerCount(); //获取触控点的数量,比如2则可能是两个手指同时按压屏幕
event.getPointerId(nID); //对于每个触控的点的细节,我们可以通过一个循环执行getPointerId方法获取索引
event.getX(nID); //获取第nID个触控点的x位置
event.getY(nID); //获取第nID个点触控的y位置
event.getPressure(nID); //LCD可以感应出用户的手指压力,当然具体的级别由驱动和物理硬件决定的
event.getDownTime() //按下开始时间
event.getEventTime() // 事件结束时间
event.getEventTime()-event.getDownTime()); //总共按下时花费时间
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
// Log.e("onTouch x y", event.getX()+" "+event.getY()); //触摸点相对于控件的X、Y距离
// Log.e("onTouch rawX rawY", event.getRawX()+" "+event.getRawY()); //触摸点相对于屏幕的X、Y距离
// switch(event.getAction()& MotionEvent.ACTION_MASK){ ACTION_MASK在Android中是应用于多点触摸操作
// switch(event.getAction()){
// case MotionEvent.ACTION_DOWN:
// Log.e("ACTION_DOWN x y", event.getX()+" "+event.getY());
// startPoint.set(event.getX(), event.getY());
// break;
// case MotionEvent.ACTION_UP:
// Log.e("ACTION_UP x y", event.getX()+" "+event.getY());
// break;
// case MotionEvent.ACTION_MOVE:
// Log.e("ACTION_MOVE x y", (event.getX()-startPoint.x)+" "+(event.getY()-startPoint.y));
// break;
// case MotionEvent.ACTION_CANCEL:
// Log.e("ACTION_CANCEL x y", event.getX()+" "+event.getY());
// break;
// }
// return false;
return mGestureDetector.onTouchEvent(event);
}
//用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
@Override
public boolean onDown(MotionEvent event) {
// TODO Auto-generated method stub
Log.e("onDown x y", event.getX()+" "+event.getY());
return false;
}
// 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发
// 参数解释:
// event0:第1个ACTION_DOWN MotionEvent
// event1:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒
@Override
public boolean onFling(MotionEvent event0, MotionEvent event1, float velocityX, float velocityY) {
// TODO Auto-generated method stub
// Log.e("onFling event0 x y", event0.getX()+" "+event0.getY());
// Log.e("onFling event1 x y", event1.getX()+" "+event1.getY());
// Log.e("onFling x y", velocityX+" "+velocityY);
if(Math.abs(event0.getX()-event1.getX())>100){
Log.e("onFling x y", velocityX+" "+velocityY);
}
return false;
}
// 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
@Override
public void onLongPress(MotionEvent event0) {
// TODO Auto-generated method stub
Log.e("onLongPress x y", event0.getX()+" "+event0.getY());
}
// 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
@Override
public boolean onScroll(MotionEvent event0, MotionEvent event1, float distanceX, float distanceY) {
// TODO Auto-generated method stub
// Log.e("onScroll event0 x y", event0.getX()+" "+event0.getY());
// Log.e("onScroll event1 x y", event1.getX()+" "+event1.getY());
// Log.e("onScroll x y", distanceX+" "+distanceY);
if(Math.abs(event0.getX()-event1.getX())>100){
Log.e("onScroll x y", distanceX+" "+distanceY);
}
return false;
}
// 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
// 注意和onDown()的区别,强调的是没有松开或者拖动的状态
@Override
public void onShowPress(MotionEvent event0) {
// TODO Auto-generated method stub
Log.e("onShowPress x y", event0.getX()+" "+event0.getY());
}
// 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
@Override
public boolean onSingleTapUp(MotionEvent event0) {
// TODO Auto-generated method stub
Log.e("onSingleTapUp x y", event0.getX()+" "+event0.getY());
return false;
}
}
源码地址:http://download.csdn.net/detail/han123456o/7137311