如何检测任何视图的长按位置?

时间:2016-05-12 07:25:46

标签: java android touch

我正在创建一个自定义UI组件,用户可以上传地图图像,然后用户可以指定某些位置并显示图钉。首先加载地图的图像用户将能够平移和缩放到任何位置。为此,我使用了下面的例子,它就像一个魅力。 TouchImageView

下一部分是在图像上长按时添加一个图钉。为此,我在地图图像上使用了绝对布局,并在最后添加了一个OnTouchListener和返回false,以便ImageView上的触摸侦听器也能正常工作。我实现了OnTouchListener,如下所示

absoluteLayout.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, final MotionEvent event) {
            switch (event.getAction()){
                case MotionEvent.ACTION_DOWN:
                    count=-1;// reset count. Thredd will start as 0
                    released = false;// Touch long press is started
                    final Handler handler = new Handler();
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            while(!released){//Stop count if touch released
                                try {
                                    count++;// Count every 200 ms
                                    Thread.sleep(200);
                                    if(count>10){ //if pressed for 200*10= 2 seconds 
                                        released=true;

                                        handler.post(new Runnable() {
                                            @Override
                                            public void run() {
                                                addPin((int) event.getX(), (int) event.getY());//Calling the method to add the pin
                                            }
                                        });
                                    }
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }

                        }
                    }).start();
                    break;

                case MotionEvent.ACTION_UP:
                    released=true;// touch is released
                    break;
                case MotionEvent.ACTION_MOVE:
                    released=true; // touch is a movement therefore release long press 
                    break;
            }

            return false;
        }
    });

但这里的问题是以案例:“MotionEvent.ACTION_MOVE”它总是让长篇新闻发布。但如果没有它,如果用户试图平移或缩放imageView,它将添加一个引脚。

我如何检测触摸中是否有移动并忽略用户缩放或平移地图的时间?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以指定最小移动量,以确定它是否是意外移动,如here

所解释