在Android的开发中要对一个View长按、滑动、和点击同时进行,在View的onTouch事件中做了以下的工作:
float xDown,yDown,xUp;
boolean isLongClickModule = false;
boolean isLongClicking = false;
myView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
//当按下时处理
if (event.getAction() == MotionEvent.ACTION_DOWN) {
xDown= event.getX();
yDown = event.getY();
Log.v("OnTouchListener", "Down");
} else if (event.getAction() == MotionEvent.ACTION_UP) {// 松开处理
//获取松开时的x坐标
if(isLongClickModule){
isLongClickModule = false;
isLongClicking = false;
}
xUp = event.getX();
Log.v("OnTouchListener", "Up");
//按下和松开绝对值差当大于20时滑动,否则不显示
if ((xUp - xDown) > 20)
{
//添加要处理的内容
}
else if((xUp - xDown ) < -20)
{
//添加要处理的内容
}
else if( 0 == (xDown - xUp))
{
int viewWidth = v.getWidth();
if( xDown < viewWidth/3 )
{
//靠左点击
}
else if(xDown > viewWidth/3 && xDown < viewWidth * 2 /3)
{
//中间点击
}
else
{
//靠右点击
}
}
}
else if (event.getAction() == MotionEvent.ACTION_MOVE)
{
//当滑动时背景为选中状态 //检测是否长按,在非长按时检测
if(!isLongClickModule)
{
isLongClickModule = isLongPressed(xDown, yDown, event.getX(),
event.getY(),event.getDownTime() ,event.getEventTime(),300);
}
if(isLongClickModule && !isLongClicking){
//处理长按事件
isLongClicking = true; }
}
else
{
//其他模式
} return false;
}}); /* 判断是否有长按动作发生
* @param lastX 按下时X坐标
* @param lastY 按下时Y坐标
* @param thisX 移动时X坐标
* @param thisY 移动时Y坐标
* @param lastDownTime 按下时间
* @param thisEventTime 移动时间
* @param longPressTime 判断长按时间的阀值
*/
private boolean isLongPressed(float lastX,float lastY,
float thisX,float thisY,
long lastDownTime,long thisEventTime,
long longPressTime){
float offsetX = Math.abs(thisX - lastX);
float offsetY = Math.abs(thisY - lastY);
long intervalTime = thisEventTime - lastDownTime;
if(offsetX <= 10 && offsetY <= 10 && intervalTime >= longPressTime){
return true;
}
return false;
}
本文介绍了在Android开发中如何在View的onTouch事件中实现长按、左右滑动和点击的判断。通过监听MotionEvent,分别处理了按下、移动和释放等状态,从而实现复杂触摸交互。
2850

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



