Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中启用tap listener in view pager?_Android_Android Viewpager - Fatal编程技术网

如何在Android中启用tap listener in view pager?

如何在Android中启用tap listener in view pager?,android,android-viewpager,Android,Android Viewpager,我正在使用视图寻呼机在Android中的视图之间滑动。 现在,我需要捕获每个视图的点击事件。当我覆盖touch listener以捕获点击事件时,滑动动作不会发生,屏幕仍保留在第一页。如何将触控监听器添加到查看寻呼机 代码: 对于上面的代码,我能够捕获点击事件,但是滑动操作变得不可能了。Nancy,您不需要手动覆盖页面滑动或触摸事件。只需将页面添加到ViewPager,ViewPager将自动处理刷卡 但是,您必须将触控监听器附加到每页中的对象。因此,如果第1页具有多个按钮的线性布局,并且您需要

我正在使用视图寻呼机在Android中的视图之间滑动。 现在,我需要捕获每个视图的点击事件。当我覆盖touch listener以捕获点击事件时,滑动动作不会发生,屏幕仍保留在第一页。如何将触控监听器添加到查看寻呼机

代码:


对于上面的代码,我能够捕获点击事件,但是滑动操作变得不可能了。

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;
        }