Autore Topic: Ottenere la view mentre mi sposto con il dito sullo schermo  (Letto 374 volte)

Offline mistico86

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    windows 7
Ottenere la view mentre mi sposto con il dito sullo schermo
« il: 26 Aprile 2013, 19:26:33 CEST »
0
salve a tutti,

vi spiego brevemente qual'è il mio problema:
immaginatevi una matrice 3x3 di numeri interi da 1 a 9. io vorrei che quando sullo schermo passo il dito dal bottone 1 al bottone 3 per esempio mi restituisca la somma dei bottoni 1+2+3.

ho provato con il metodo Ontouch, che restituisce una View v. il problema è che mi restituisce sempre la prima view, ovvero il primo bottone che tocco con il dito, anche se continuo a muovermi su altri bottoni.

ho provato associando un rettangolo di dimensioni uguali al bottone e di controllare se la posizione X e Y dove tocco è in quel rettangolo, ma non funziona neanche in quel modo.

Esiste un altro metodo più adatto o qualche trucco per far si che mi passi tutte le view (bottoni) che tocco sullo schermo?

Grazie mille in anticipo,
 spero possiate aiutarmi che sono giorni che ci sbatto la testa.  :-X


Codice (Java): [Seleziona]
@Override
public boolean onTouchEvent(MotionEvent event) {
    int touchX = event.getX();
    int touchY = event.getY();
    switch(event){
        case MotionEvent.ACTION_DOWN:
            System.out.println("Touching down!");
            for(Rect rect : rectangles){
                if(rect.contains(touchX,touchY)){
                    System.out.println("Touched Rectangle, start activity.");
                    Intent i = new Intent(<your activity info>);
                    startActivity(i);
                }
            }
            break;
        case MotionEvent.ACTION_UP:
            System.out.println("Touching up!");
            break;
        case MotionEvent.ACTION_MOVE:
            System.out.println("Sliding your finger around on the screen.");
            break;
    }
    return true;
}

questo è un esempio che ho trovato su internet ma non funziona. sapreste dove sbaglio?
« Ultima modifica: 26 Aprile 2013, 19:30:18 CEST da mistico86 »

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Ottenere la view mentre mi sposto con il dito sullo schermo
« Risposta #1 il: 26 Aprile 2013, 21:16:28 CEST »
0
Non credo che creare sempre nuovi topic con la stessa domanda sia il modo giusto di cercare la risposta.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline mistico86

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    windows 7
Re:Ottenere la view mentre mi sposto con il dito sullo schermo
« Risposta #2 il: 27 Aprile 2013, 02:34:47 CEST »
0
bè, qualcuno potrebbe anche rispondere vista la vostra esperienza. io non so più come cercare

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Ottenere la view mentre mi sposto con il dito sullo schermo
« Risposta #3 il: 27 Aprile 2013, 13:41:54 CEST »
0
Un modo, brutto e probabilmente imperfetto, potrebbe essere controllare nell'onTouch la x e la y del tocco e confrontarla con la x e la y di ogni bottone.

Però non l'ho ne provato ne ti assicuro che funzioni. E' la prima idea che mi è venuta in mente :)
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline mistico86

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    s3
  • Sistema operativo:
    windows 7
Re:Ottenere la view mentre mi sposto con il dito sullo schermo
« Risposta #4 il: 27 Aprile 2013, 15:31:52 CEST »
0
Un modo, brutto e probabilmente imperfetto, potrebbe essere controllare nell'onTouch la x e la y del tocco e confrontarla con la x e la y di ogni bottone.

Però non l'ho ne provato ne ti assicuro che funzioni. E' la prima idea che mi è venuta in mente :)


intendi qualcosa del genere?
Codice (Java): [Seleziona]
public boolean onTouch(View v, MotionEvent event) {
        String eventName = "";

        LinearLayout layout = (LinearLayout)v;

        for(int i =0; i< layout.getChildCount(); i++)
        {
            View view = layout.getChildAt(i);


            Rect outRect = new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
            //Rect outRect = new Rect();                
            //view.getLocalVisibleRect(outRect);//nao funciona

            if(outRect.contains((int)event.getX(), (int)event.getY()))
            {
                //touching piano key
            }
        }

perchè ci ho provato, ma il problema è che il rettangolo che creo evidentemente non lo crea bene....perchè anche se vado col dito fuori dai bottoni continua a calcolarmeli.

come lo scriveresti te? grazie mille

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Ottenere la view mentre mi sposto con il dito sullo schermo
« Risposta #5 il: 27 Aprile 2013, 16:57:15 CEST »
0
Cercando da google su stackoverflow:

Codice (Java): [Seleziona]
private View findView(float x, float y, ArrayList<View> targets)
{
    final int count = targets.size();
    for (int i = 0; i < count; i++) {
        final View target = targets.get(i);
        if (target.getRight() > x && target.getTop() < y
                && target.getBottom() > y && target.getLeft() < x) {
            return target;
        }
    }
    return null;
}

Con targets un arraylist di view, che in questo caso sarebbero i tuoi bottoni :)
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.