Autore Topic: Android drag&drop personalizzato orizzontale trema  (Letto 209 volte)

Offline FeddyCap

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GT-I9000 con CyanogenMod 10
  • Sistema operativo:
    Windows 7 Ultimate 64bit
Android drag&drop personalizzato orizzontale trema
« il: 25 Giugno 2015, 16:15:27 CEST »
0
Ho creato una classe che serve a permettere all'utente di spostare orizzontalmente una View scorrendo il dito su un'altra View (che funge tipo da barra) il codice è questo:
Codice (Java): [Seleziona]
public class Dragger implements View.OnTouchListener {
  private View toDrag;
  private Point startDragPoint;
  private int offset;
  public Dragger (View bar, View toDragg){
    toDrag = toDragg;
    dragging = false;
    bar.setOnTouchListener(this);
  }
  public boolean onTouch(View v, MotionEvent evt) {
    switch (evt.getAction()) {
        case MotionEvent.ACTION_DOWN:
          startDragPoint = new Point((int) evt.getX(), (int) evt.getY());
          offset = startDragPoint.x - (int) toDrag.getX();
        break;
        case MotionEvent.ACTION_MOVE:
          int currentX = (int)evt.getX();
          Log.d("LOG","currentX=" + currentX);
          toDrag.setX(currentX-offset);
        break;
        case MotionEvent.ACTION_UP:
            int difference = (startDragPoint.x-offset)-(int)toDrag.getX();
            if(difference<-125){
              ((ViewManager) toDrag.getParent()).removeView(toDrag);
            }else{
                toDrag.setX(startDragPoint.x-offset);
            }
            dragging = false;
    }
    return true;
  }
}
Nell' OnCreate dell'activity principale lo uso semplicemente chiamandone il costruttore così:
Codice (Java): [Seleziona]
new Dragger(barItem,itemToDrag);Ora veniamo al dunque: di base funziona, però la View che si muove trema parecchio durante il movimento.
Ho provato a capire come mai fa questa cosa strana, per capirci qualcosa ho messo un Log nell'ACTION_MOVE dell'OnTouch, e il risultato è che... and the result is that... anche se mi sposto avanti un pixel alla volta ogni tanto la currentX slitta di indietro di tanto (avvolte 10, avvolte 20, un pò a caso) e poi al pixel successivo ritorna al numero corretto aumentando di 1 il numero precedente.
Non ha alcun senso...
Qualche idea su come risolverlo?

Post unito: 25 Giugno 2015, 17:36:27 CEST
Ho risolto: il problema è che la barra era all'interno del componente da spostare, quindi dato che la barra si muoveva insieme al componente succedevano cose strane con le coordinate, bastava mettere la barra fuori al componente per risolvere
« Ultima modifica: 25 Giugno 2015, 17:36:27 CEST da FeddyCap, Reason: Merged DoublePost »