如何在Android中启用tap listener in view pager?
我正在使用视图寻呼机在Android中的视图之间滑动。 现在,我需要捕获每个视图的点击事件。当我覆盖touch listener以捕获点击事件时,滑动动作不会发生,屏幕仍保留在第一页。如何将触控监听器添加到查看寻呼机 代码:如何在Android中启用tap listener in view pager?,android,android-viewpager,Android,Android Viewpager,我正在使用视图寻呼机在Android中的视图之间滑动。 现在,我需要捕获每个视图的点击事件。当我覆盖touch listener以捕获点击事件时,滑动动作不会发生,屏幕仍保留在第一页。如何将触控监听器添加到查看寻呼机 代码: 对于上面的代码,我能够捕获点击事件,但是滑动操作变得不可能了。Nancy,您不需要手动覆盖页面滑动或触摸事件。只需将页面添加到ViewPager,ViewPager将自动处理刷卡 但是,您必须将触控监听器附加到每页中的对象。因此,如果第1页具有多个按钮的线性布局,并且您需要
对于上面的代码,我能够捕获点击事件,但是滑动操作变得不可能了。Nancy,您不需要手动覆盖页面滑动或触摸事件。只需将页面添加到ViewPager,ViewPager将自动处理刷卡 但是,您必须将触控监听器附加到每页中的对象。因此,如果第1页具有多个按钮的线性布局,并且您需要知道这些按钮是何时被单击的,则需要为每个按钮附加onclick监听器 一定要让我知道你的用例,这样我们才能更好地理解,为什么你需要知道什么时候点击了一个页面 我们可以使用手势(,):
希望这有帮助 这里我给您留下一段代码,用于检测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;
}
});
mImagePager.setOnTouchListener(新的OnTouchListener(){
私有浮点x;
私人浮尖;
私有整数容差=50;
@凌驾
公共布尔onTouch(视图v,运动事件){
开关(event.getAction()){
case MotionEvent.ACTION\u移动:
return false;//这很重要,如果返回TRUE,则不会执行刷卡操作。
case MotionEvent.ACTION\u DOWN:
pointX=event.getX();
pointY=event.getY();
打破
case MotionEvent.ACTION\u UP:
布尔sameX=pointX+tolerance>event.getX()&&pointX-toleranceevent.getY()&&pointY-tolerance
为了补充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;
}
在方法
实例化item
中,将click事件放在viewPagerAdapter内的viewpager项目视图上,如-
@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;
}
我需要显示一个警告框时,屏幕是点击查看寻呼机。在这种情况下,如何捕获Tap事件。我的屏幕是一个带有列表视图的线性布局。通过设置linearlayout属性android:clickable=true,然后在其上使用ClickListener或2,来侦听linearlayout(包含ListView)上的单击。收听ListView项目上的onItemClick,这样当项目被单击时,它可以转到onItemClick Listener谢谢,如果您想要或需要,您可以添加一个计时器,如果它释放触摸或其他东西需要一秒钟以上的时间,那么您可以决定不触发触摸。这是一个非常好的答案!我能找到的最好的,而且花了很多时间去寻找。这也可以应用于Listview中的viewPager。只需在onTouch之后添加RequestDisallowWinterCeptTouchEvent(true),以防止Listview访问intercept touch事件,然后在操作中添加RequestDisallowWinterCeptTouchEvent(false)。
// 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;
}
@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;
}