Autore Topic: Rilevazione trascinamento su schermo  (Letto 1345 volte)

Offline Rolandx

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG G2 D802
  • Sistema operativo:
    Windows
Rilevazione trascinamento su schermo
« il: 22 Maggio 2012, 19:00:13 CEST »
0
Salve gente, come posso fare a rilevare gli eventi di trascinamento sul touchscreen?

Offline gnamgnam

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: +1
    • Mostra profilo
Re:Rilevazione trascinamento su schermo
« Risposta #1 il: 22 Maggio 2012, 21:14:26 CEST »
0
guarda questo esempio ti rileva il multitouch

public class MultiTouchTest  extends Activity implements OnTouchListener{
   StringBuilder builder=new StringBuilder();
   TextView textview;
   float[] x=new float[10];
   float[] y=new float[10];
   boolean [] touched=new boolean[10];
   
   private void updateTextView()
    {
      builder.setLength(0);
      for(int i=0; i<10;i++)
      {
         builder.append(touched);
         builder.append(", ");
         builder.append(x);
         builder.append(", ");
         builder.append(y);
         builder.append("\n");
      }
      textview.setText(builder.toString());
    }
   
   @Override
   public void onCreate(Bundle savedInstanceState)
    {
      super.onCreate(savedInstanceState);
      textview=new TextView(this);
      textview.setText("Tocca e trascina(anche più di un dito)!");
      textview.setOnTouchListener(this);
      setContentView(textview);
    }
   
   @Override
   public boolean onTouch(View v, MotionEvent event)
   {
      /*l'evento event contiene info sia riguardanti l'azione che l'id delle
       * dita quindi si devono effettuare delle comparazioni con delle maschere
       * per ottenre le informazioni che ci interessano;
       * Con la prima operazione otteniamo l'action da processare comparando
       * l'azione effettuata con la maschera delle azioni,
       * con la seconda effettuiamo uno sift di bit verso destra di MotionEvent.ACTION_POINTER_ID_SHIFT posizioni
       * del valore ottenuto comparando l'azione sollevata con la maschera di ACTION_POINTER
       * ottenendo l'indice assegnato al dito
       */
     int action=(event.getAction() & MotionEvent.ACTION_MASK);
     int pointerIndex=((event.getAction())&(MotionEvent.ACTION_POINTER_ID_MASK))>>(MotionEvent.ACTION_POINTER_ID_SHIFT);
     int pointerId=event.getPointerId(pointerIndex);
     switch(action)
     {
      case MotionEvent.ACTION_DOWN:
      case MotionEvent.ACTION_POINTER_DOWN:
         touched[pointerId]=true;
         x[pointerId]=(int)event.getX(pointerIndex);
         y[pointerId]=(int)event.getY(pointerIndex);
         break;
         
      case MotionEvent.ACTION_UP:
      case MotionEvent.ACTION_POINTER_UP:
      case MotionEvent.ACTION_CANCEL:
         touched[pointerId]=false;
         x[pointerId]=(int)event.getX(pointerIndex);
         y[pointerId]=(int)event.getY(pointerIndex);
         break;

      case MotionEvent.ACTION_MOVE:
         int pointerCount=event.getPointerCount();
         for(int j=0; j<pointerCount;j++)
         {
         pointerIndex=j;
         pointerId=event.getPointerId(pointerIndex);
          x[pointerId]=(int)event.getX(pointerIndex);
          y[pointerId]=(int)event.getY(pointerIndex);
         }
         break;
     }
    updateTextView();
    return true;
   }
}

Offline Rolandx

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG G2 D802
  • Sistema operativo:
    Windows
Re:Rilevazione trascinamento su schermo
« Risposta #2 il: 22 Maggio 2012, 21:42:58 CEST »
0
Uhm grazie, se invece vorrei ottenere le coordinate della prima pressione e poi del rilascio come dovrei fare?

Offline gnamgnam

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: +1
    • Mostra profilo
Re:Rilevazione trascinamento su schermo
« Risposta #3 il: 22 Maggio 2012, 21:47:38 CEST »
0
dovrestri prendere i primi elementi del vettore con le coordinate