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

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 に答える
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 に答える