Muisklik simuleren

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • granitk7
  • Registratie: Augustus 2014
  • Laatst online: 06-12-2024
Ik ben bezig met een app die je kan gebruiken als muis. Nu probeer ik om een muisklik te simuleren als er op de mousepad wordt geklikt, maar dit wordt elke keer gezien als een muisbeweging.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 if(isConnected && out!=null){
                switch(event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        //save X and Y positions when user touches the TextView
                        initX =event.getX();
                        initY =event.getY();
                        mouseMoved=false;
                        break;
                    case MotionEvent.ACTION_MOVE:
                        disX = event.getX()- initX; //Mouse movement in x direction
                        disY = event.getY()- initY; //Mouse movement in y direction
                        /*set init to new position so that continuous mouse movement
                        is captured*/
                        initX = event.getX();
                        initY = event.getY();
                        if(disX !=0|| disY !=0){
                            out.println(disX +","+ disY); //send mouse movement to server
                        }
                        mouseMoved=true;
                        break;
                    case MotionEvent.ACTION_UP:
                        //consider a tap only if usr did not move mouse after ACTION_DOWN
                        if(!mouseMoved){
                               out.println(Constants.MOUSE_LEFT_CLICK);
                        }
                }
            }
            return true;
        }
    });
}


Hoe zou ik dit kunnen oplossen?

Beste antwoord (via granitk7 op 18-02-2017 22:24)


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gokje; je beweegt 1 of een paar pixels tijdens de klik. Bouw een beetje een marge in (disx/disy meer dan X pixels dan pas mousemoved op true zetten) en probeer het dan nog eens?
Overigens mis ik een break; in je laatste case. Die hoeft misschien niet maar ik zou 'm er wel inzetten voor als je ooit een nieuwe case eronder zet.

[ Voor 48% gewijzigd door RobIII op 17-02-2017 23:59 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Alle reacties


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gokje; je beweegt 1 of een paar pixels tijdens de klik. Bouw een beetje een marge in (disx/disy meer dan X pixels dan pas mousemoved op true zetten) en probeer het dan nog eens?
Overigens mis ik een break; in je laatste case. Die hoeft misschien niet maar ik zou 'm er wel inzetten voor als je ooit een nieuwe case eronder zet.

[ Voor 48% gewijzigd door RobIII op 17-02-2017 23:59 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • granitk7
  • Registratie: Augustus 2014
  • Laatst online: 06-12-2024
Bedankt voor je reactie.

Ik heb het volgende geprobeerd:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
int max = 2
int min = -2

case MotionEvent.ACTION_UP:
                            //consider a tap only if usr did not move mouse after ACTION_DOWN
                            if(disX <= max && disX >= min && disY <= max && disY >= min){
                                out.println(Constants.MOUSE_LEFT_CLICK);
                                break;
                            }
                    }
                }
                return true;


Het lukt me nu wel om een muisklik uit te voeren, maar dit gebeurt nu dus elke keer, zodra ik de mousepad loslaat. Als ik bijvoorbeeld niet wil klikken maar de cursor alleen wil verplaatsen dan voert hij een linker muisklik uit, zodra ik de mousepad loslaat.

Ik was vergeten de mousemoved vergeten naar = false te zetten. Nu werkt die wel, bedankt!

Java:
1
2
3
4
5
6
7
case MotionEvent.ACTION_UP:
                            //consider a tap only if usr did not move mouse after ACTION_DOWN
                            if(disX <= max && disX >= min && disY <= max && disY >= min){
                                out.println(Constants.MOUSE_LEFT_CLICK);
                                mouseMoved=false;
                                break;
                            }

[ Voor 25% gewijzigd door granitk7 op 18-02-2017 21:31 ]


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 13:21
Misschien nog combineren met een timeout? <200ms (of net wat werkt voor jou) is een tap, langer een beweging?