我如何检测在onTouch听众点击? [英] How can I detect a click in an onTouch listener?
问题描述
我有一个滚动视图内ViewPager。我需要能够水平滚动以及垂直。为了实现此有用来关闭垂直滚动每当我的viewPager被触摸( v.getParent()requestDisallowInterceptTouchEvent(真);
),所以它可以被水平滚动
但在同一时间,我需要能够点击viewPager以全屏模式打开它。
的问题是,onTouch被调用的onClick前,我的OnClick不会被调用。
我如何能实现这两个触摸一个onClick?
viewPager.setOnTouchListener(新OnTouchListener(){
@覆盖
公共布尔onTouch(视图V,MotionEvent事件){
的System.out.println(接触);
如果(event.getAction()== MotionEvent。???){
//打开全屏活动
}
。v.getParent()requestDisallowInterceptTouchEvent(真正的); //这不能被删除
返回false;
}
});
viewPager.setOnClickListener(新OnClickListener(){
@覆盖
公共无效的onClick(视图v){
的System.out.println(点击);
意图fullPhotoIntent =新的意图(背景下,FullPhotoActivity.class);
fullPhotoIntent.putStringArrayListExtra(imageUrls,imageUrls);
startActivity(fullPhotoIntent);
}
});
马苏德Dadashi的回答让我看着办吧。
下面是它的外观到底。 P>
viewPager.setOnTouchListener(新OnTouchListener(){
私人浮动STARTX;
私人浮动startY;
@覆盖
公共布尔onTouch(视图V,MotionEvent事件){
开关(event.getAction()){
案例MotionEvent.ACTION_DOWN:
STARTX = event.getX();
startY = event.getY();
打破;
案例MotionEvent.ACTION_UP:{
浮endX = event.getX();
浮恩迪= event.getY();
如果(isAClick(STARTX,endX,startY,恩迪)){
launchFullPhotoActivity(imageUrls); //我们有一个点击!
}
打破;
}
}
。v.getParent()requestDisallowInterceptTouchEvent(真正的); //具体到我的项目
返回false; //具体到我的项目
}
私人布尔isAClick(STARTX浮动,浮动endX,浮startY,浮恩迪){
浮differenceX = Math.abs(STARTX - endX);
浮differenceY = Math.abs(startY - 恩迪);
如果(differenceX> C.CLICK_ACTION_THRESHHOLD / * = 5 * / || differenceY> C.CLICK_ACTION_THRESHHOLD){
返回false;
}
返回true;
}
I have a ViewPager inside a scroll view. I need to be able to scroll horizontally as well as vertically. In order to achieve this had to disable the vertical scrolling whenever my viewPager is touched (v.getParent().requestDisallowInterceptTouchEvent(true);
), so that it can be scrolled horizontally.
But at the same time I need to be able to click the viewPager to open it in full screen mode.
The problem is that onTouch gets called before onClick and my OnClick is never called.
How can I implement both on touch an onClick?
viewPager.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
System.out.println("TOUCHED ");
if(event.getAction() == MotionEvent.???){
//open fullscreen activity
}
v.getParent().requestDisallowInterceptTouchEvent(true); //This cannot be removed
return false;
}
});
viewPager.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("CLICKED ");
Intent fullPhotoIntent = new Intent(context, FullPhotoActivity.class);
fullPhotoIntent.putStringArrayListExtra("imageUrls", imageUrls);
startActivity(fullPhotoIntent);
}
});
Masoud Dadashi's answer helped me figure it out.
here is how it looks in the end.
viewPager.setOnTouchListener(new OnTouchListener() {
private float startX;
private float startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
case MotionEvent.ACTION_UP: {
float endX = event.getX();
float endY = event.getY();
if (isAClick(startX, endX, startY, endY)) {
launchFullPhotoActivity(imageUrls);// WE HAVE A CLICK!!
}
break;
}
}
v.getParent().requestDisallowInterceptTouchEvent(true); //specific to my project
return false; //specific to my project
}
.
private boolean isAClick(float startX, float endX, float startY, float endY) {
float differenceX = Math.abs(startX - endX);
float differenceY = Math.abs(startY - endY);
if (differenceX > C.CLICK_ACTION_THRESHHOLD/* =5 */ || differenceY > C.CLICK_ACTION_THRESHHOLD) {
return false;
}
return true;
}
这篇关于我如何检测在onTouch听众点击?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!