activity 或 fragment 实现接口 View.OnTouchListener
如:public class MyFragment extends Fragment implements View.OnTouchListener{
重写实现方法
@Override
public boolean onTouch(View v, MotionEvent event) {
//继承了Activity的onTouchEvent方法,直接监听点击事件
if(event.getAction() == MotionEvent.ACTION_DOWN) {
//当手指按下的时候
x1 = event.getX();
y1 = event.getY();
}
if(event.getAction() == MotionEvent.ACTION_MOVE) {
//当手指移动的时候
x2 = event.getX();
y2 = event.getY();
if(y1 - y2 > 50) {
Toast.makeText(MyServiceTestActivity.this, "向上滑", Toast.LENGTH_SHORT).show();
} else if(y2 - y1 > 50) {
Toast.makeText(MyServiceTestActivity.this, "向下滑", Toast.LENGTH_SHORT).show();
} else if(x1 - x2 > 50) {
Toast.makeText(MyServiceTestActivity.this, "向左滑", Toast.LENGTH_SHORT).show();
} else if(x2 - x1 > 50) {
Toast.makeText(MyServiceTestActivity.this, "向右滑", Toast.LENGTH_SHORT).show();
}
}
if (event.getAction()==MotionEvent.ACTION_UP){
Log.i("Lgq","sssssssll离开了lllll==");
// updview(nowpersion);
}
return super.onTouchEvent(event);
// return false;
}
view设置监听
slv = (ScrollListenerView)findViewById(R.id.slv);
slv.setOnTouchListener(this);
分发二:重写方法
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction()==MotionEvent.ACTION_UP){
LgqLogutil.e("动啦啦啦啦");
}
return super.dispatchTouchEvent(ev);
}
滑动速度:放在MotionEvent.ACTION_MOVE里
VelocityTracker mVelocityTracker = VelocityTracker.obtain(); mVelocityTracker.addMovement(ev); mVelocityTracker.computeCurrentVelocity(1000); float xVelocity = mVelocityTracker.getXVelocity();//速度 xVelocity = Math.abs(xVelocity);//去绝对值。向左滑,值为负数
获取最多速度
float sudu;
if (sudu < xVelocity) {
sudu = xVelocity;
}
缩放手势获取
double nLenStart = 0;
@Override
public boolean onTouchEvent(MotionEvent event) {
int nCnt = event.getPointerCount();
if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_DOWN && 2 == nCnt)//<span style="color:#ff0000;">2表示两个手指</span>
{
for (int i = 0; i < nCnt; i++) {
float x = event.getX(i);
float y = event.getY(i);
Point pt = new Point((int) x, (int) y);
}
int xlen = Math.abs((int) event.getX(0) - (int) event.getX(1));
int ylen = Math.abs((int) event.getY(0) - (int) event.getY(1));
nLenStart = Math.sqrt((double) xlen * xlen + (double) ylen * ylen);
} else if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_UP && 2 == nCnt) {
for (int i = 0; i < nCnt; i++) {
float x = event.getX(i);
float y = event.getY(i);
Point pt = new Point((int) x, (int) y);
}
int xlen = Math.abs((int) event.getX(0) - (int) event.getX(1));
int ylen = Math.abs((int) event.getY(0) - (int) event.getY(1));
double nLenEnd = Math.sqrt((double) xlen * xlen + (double) ylen * ylen);
if (nLenEnd > nLenStart)//通过两个手指开始距离和结束距离,来判断放大缩小
{
LgqLogPlus.e("放大");
setZoom();
} else {
LgqLogPlus.e("缩小");
setZoomjian();
}
}
return super.onTouchEvent(event);
}
本文介绍如何在Android中使用View.OnTouchListener接口处理触摸事件,包括按下、移动、抬起等操作,并演示了如何实现滑动方向判断及缩放手势检测。
1525

被折叠的 条评论
为什么被折叠?



