onTouch始终显示对第二个事件的反应

时间:2014-06-15 12:37:27

标签: android android-custom-view ontouchevent ontouchlistener

在我的应用程序中,我在一个活动中有一个自定义视图。 为了检测触摸事件,我在两个方法中都有onTouchEvent()方法。

自定义视图:onTouchEvent() - 方法基本上只标记被触摸的对象。

@Override
    public boolean onTouchEvent(MotionEvent event) {
        int maskedAction = event.getActionMasked();

        switch (maskedAction) {
        case MotionEvent.ACTION_DOWN:
            touchedXY[0] = event.getX();
            touchedXY[1] = event.getY();
            mMatrix.mapPoints(touchedXY);                  // this is just for
            event.setLocation(touchedXY[0], touchedXY[1]); // rotation purposes
            for(int i = 0; i < mPoints[i]; i++){
                    mPoints[i].isSelected(setIsSelected(touchedXY)); //using method to
                                                                     //check if point
                                                                     //is selected          
            }
            break;
        default:
            return false;
        }
        invalidate();
        return true;
    }

活动:如果触摸了一个对象,则LinearLayout应显示在活动的底部,并显示触摸点的数量。

int key = 0;

@Override
    public boolean onTouch(View v, MotionEvent event) {
        // get masked (not specific to a pointer) action
        int maskedAction = event.getActionMasked();

        switch (maskedAction) {
        case MotionEvent.ACTION_DOWN:
            List<AddressPoint> selectedPoints = Arrays.asList(mPoints);

            if (key == 0) {
                if (selectedPoints.size() > 0) {
                    key = 1;
                    test.setText(String.valueOf(selectedPoints.size()));
                    popup.setVisibility(View.VISIBLE);

                } else {
                    test.setText(String.valueOf(selectedPoints.size()));
                }
            } else {
                if (selectedPoints.size() > 0) {
                    test.setText(String.valueOf(selectedPoints.size()));
                } else {
                    key = 0;
                    popup.setVisibility(View.GONE);

                }
            }
            break;
        default:
            return false;
        }
        return false;
    }

所以,它正在发挥作用,但表现得并不理想。活动似乎只对第二次尝试做出反应,并且每隔一秒就会更新一次。 例如:

  1. TouchEvent = 4 Points - &gt;活动显示没有弹出窗口。
  2. TouchEvent = 3 Points - &gt;活动会显示带有编号&#34; 4&#34;
  3. 的弹出窗口
  4. TouchEvent = 1 Point - &gt;活动显示弹出的数字&#34; 3&#34; 。 。等等
  5. 我希望你能帮助我,我感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

问题似乎存在,因为在保存点之前会重新绘制视图。

因此,最好在onTouch onTouchEvent中保存点数,然后再调用另一个函数来相应地设置文本。