我'加入imageviews于母公司布局动态。 和我'中添加图像的onTouch /缩小操作进行变焦。 我想删除它的添加视图onLongPress。
img.setOnLongClickListener(longClickAction);
img.setOnTouchListener(touchAction);
onLongPress:
OnLongClickListener longClickAction = new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
parentLayout.removeView((ImageView)v);
return false;
}
};
onTouch:
OnTouchListener touchAction = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView i = (ImageView)v;
//perfrom zoom operation on touch of imageview
zoom(i, event);
return true;
}
};
只有触摸事件正在工作。 为什么? 我怎样才能兼得? 当IAM回事? 我应该怎么做,除去额外的看法? 请帮我。 提前致谢。
onTouch
总是要求你的观点,因为这是分派事件视图的初始状态。 当你长按你的观点,这仍然呼吁onTouch
第一,因为你返回true
的onTouch
(这意味着你已经消耗这个事件,它不应该再分派),你不会得到onLongPress
调用。 什么会做的伎俩是返回false
的onTouch
正如讨论@asenovm 的onTouch()总是被称为是分派事件视图的初始状态,但如果返回值onTouch 假 ()然后双方将工作就像一个魅力和问题将得到解决。
编辑:我给用户的建议是,与其实现OnLongClickListener()和OnTouch()一起,尝试双击事件中使用OnLongClickListener()的函数。
您可以通过以下方式实现双击:
int i = 0;
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
i++;
Handler handler = new Handler();
Runnable r = new Runnable() {
@Override
public void run() {
i = 0;
}
};
if (i == 1) {
//Single click
handler.postDelayed(r, 250);
} else if (i == 2) {
//Double click
i = 0;
ShowDailog();
}
}
});
试试这个,它工作正常,我。
boolean isMoving= false;
yourView.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
isMoving = true;
Log.i("isMoving:", "true");
}
if(event.getAction()==MotionEvent.ACTION_UP){
isMoving=false;
Log.i("isMoving:","false");
}
return false;
}
});
yourView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if(!isMoving){
//do onlongclick event here
}
return true;
}
});;