我正在使用浏览寻呼机在Android中的视图之间滑动。 现在我需要为每个视图捕获tap事件。当我覆盖触摸侦听器以捕获点击事件时,滑动操作不会发生,并且屏幕保留在第一页本身。如何添加触摸侦听器以查看寻呼机?
代码:
viewPager.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event)
{
mDetector.onTouchEvent(event);
return true;
}});
对于上面的代码,我能够捕捉点击事件,但是滑动动作变为不可能。
答案 0 :(得分:25)
在这里,我从代码中留下一个片段来检测OnTouchListener上的“点击”,我希望它有所帮助
mImagePager.setOnTouchListener(new OnTouchListener() {
private float pointX;
private float pointY;
private int tolerance = 50;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_MOVE:
return false; //This is important, if you return TRUE the action of swipe will not take place.
case MotionEvent.ACTION_DOWN:
pointX = event.getX();
pointY = event.getY();
break;
case MotionEvent.ACTION_UP:
boolean sameX = pointX + tolerance > event.getX() && pointX - tolerance < event.getX();
boolean sameY = pointY + tolerance > event.getY() && pointY - tolerance < event.getY();
if(sameX && sameY){
//The user "clicked" certain point in the screen or just returned to the same position an raised the finger
}
}
return false;
}
});
答案 1 :(得分:4)
答案 2 :(得分:2)
Nancy,您无需手动覆盖页面滑动或触摸事件。只需将页面添加到ViewPager,ViewPager就会自动进行滑动。
但是,您必须将触摸侦听器附加到每个页面中的对象。因此,如果Page 1具有包含许多按钮的线性布局,并且您需要找出单击这些按钮的时间,你需要为每个按钮附加OnClickListeners。
请告诉我您的用例,以便我们更好地了解您为什么需要找到点击页面的时间!
答案 3 :(得分:0)
只是为了增加Jorge的好答案,你可能只使用距离而不是sameX和sameY,这更优雅。样品:
// Ignore events that are swipes rather then touches
float distX = event.getX() - pointX;
float distY = event.getY() - pointX;
double dist = Math.sqrt(distX * distX + distY * distY);
if (dist > tolerance) {
return false;
}
答案 4 :(得分:0)
将click事件放在viewPager的项目视图中,方法instantiateItem
中的viewPagerAdapter,如< - p>
@Override
public Object instantiateItem(ViewGroup container, final int position) {
// Declare Variables
ImageView jive_image;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.list_item_viewpager, container,
false);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
// Add viewpager_item.xml to ViewPager
((ViewPager) container).addView(itemView);
return itemView;
}