0

如果我“点击”,它将打印“点击”。但是,一旦我“长按”它只会打印“长按”,无论长度如何。

LinearLayout ll = new LinearLayout(this);

ll.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) 
        System.out.println("click");
    }
});

ll.setOnLongClickListener(new OnLongClickListener(){
    @Override
    public boolean onLongClick(View v) {
        v.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        System.out.println("long click");                   
                    case MotionEvent.ACTION_MOVE:
                    case MotionEvent.ACTION_UP:
                }
                return false;
            }                      
        });                     
        return true;
    }
});
4

2 回答 2

0

可能改变:

ll.setOnLongClickListener(new OnLongClickListener(){
    @Override
        public boolean onLongClick(View v) {
        v.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
            System.out.println("long click");                   
            case MotionEvent.ACTION_MOVE:
            case MotionEvent.ACTION_UP:
            }
        return false;
        }                      
        });                     
    return true;
    }
});

ll.setOnLongClickListener(new OnLongClickListener(){
    @Override
    public boolean onLongClick(View v) {
        System.out.println("long click");  
        v.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                    case MotionEvent.ACTION_MOVE:
                    case MotionEvent.ACTION_UP:
                }
                return false;
            }                      
        });                     
        return true;
    }
});

这样,当它收到长按而不是您“设置”后的触摸事件时,它将打印“长按”

于 2012-06-12T01:09:47.753 回答
0

只是一个 TouchListener 怎么样?它将记录时间ACTION_DOWN,如果ACTION_UP时间足够长,则从 MotionEvent 中提取坐标。

ll.setOnTouchListener(new View.OnTouchListener() {
    Calendar down;
    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            down = Calendar.getInstance();
            break;
        case MotionEvent.ACTION_UP:
            // Only continue if longer than 2 seconds
            if(Calendar.getInstance().getTimeInMillis() - down.getTimeInMillis() > 2000) {
                // Touch coordinates: event.getX(), event.getY()
            }
        }
        return true;
    }
});
于 2012-06-12T01:14:46.890 回答