如何在Android中的视图寻呼机中启用点击监听器?

时间:2012-03-05 07:35:10

标签: android android-viewpager

我正在使用浏览寻呼机在Android中的视图之间滑动。 现在我需要为每个视图捕获tap事件。当我覆盖触摸侦听器以捕获点击事件时,滑动操作不会发生,并且屏幕保留在第一页本身。如何添加触摸侦听器以查看寻呼机?

代码:

viewPager.setOnTouchListener(new OnTouchListener(){

            @Override
            public boolean onTouch(View v, MotionEvent event)
            {

                     mDetector.onTouchEvent(event);
                     return true;   



            }});

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

5 个答案:

答案 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)

我们可以使用手势(Link1Link2):

public boolean onTouchEvent (MotionEvent ev)

希望这有帮助!

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