C'è qualcosa che mi manca in questo modo, spero che tu possa condividere un po 'di luce su di me.Il trascinamento del testo ruotato all'interno della tela Android non funziona come previsto
Sto disegnando del testo all'interno della tela. Per questo ho una classe Word
public class Word {
private int x;
private int y;
private String text;
}
L'applicazione permette all'utente di ruotare il testo, e mi occupo della rotazione withing onDraw
protected void onDraw(Canvas canvas) {
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.rotate(angle, centerX, centerY)
...
canvas.drawText(word.getText(), word.getX(), word.getY())
....
canvas.restore();
}
Il problema che ottengo è quando l'utente trascina la tela e c'è un set di rotazione. Quando angolo = 0 il movimento sta andando come previsto.
@Override
public boolean onTouchEvent(MotionEvent event) {
case MotionEvent.ACTION_DOWN:
initialX = (int) event.getX();
initialY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
int currentX = (int) event.getX();
int currentY = (int) event.getY();
int xMovement = currentX - initialX;
int yMovement = currentY - initialY;
dragWords(xMovement, yMovement);
.....
e dragWords
per ogni parola che faccio:
private void dragText(int xMovement, int yMovement){
for (Word word : words) {
word.setX(word.getX() + xMovement);
word.setY(word.getY() + yMovement);
}
invalidate();
}
Quando l'angolo di rotazione è 0, muovendosi su/giù/sinistra/destra rende le parole muovono alla stessa distanza . Quando l'angolo diventa più grande, le parole iniziano a muoversi in diverse dirrazioni, ad esempio a 60, inizia a salire in diagonale, quando 180 si sposta solo su/giù e non a sinistra/a destra.
Penso di aver bisogno di calcolare una sorta di differenza in base all'angolo e di aggiungerlo a xMovement/yMovement ... ma come dovrei farlo?
LE: Ecco un'immagine su come si comporta: Le linee blu è come il testo si muove sulla resistenza, mentre l'arancia è il dito trascinare sullo schermo. Quando l'angolo è 0, funziona piuttosto bene, quando l'angolo aumenta, inizia a spostarsi diagonalmente a sinistra/destra, mentre quando l'angolo è ancora più grande, si sposta solo su e giù e non risponde a sinistra/destra
Realmente non vedo la differenza tra questa soluzione e la sostanza che ho postato (?) – matiash
È davvero lo stesso approccio era solo un po 'più semplice, solo su matrice con -angle – Alin
@matiash Ho appena dato la sostanza che hai postato un esempio di esecuzione - funziona bene, salva un problema non correlato (non importante). Il fatto è che ho esaminato la tua risposta e ho visto che "Alin" non ha avuto successo. Così, ho codificato da solo con l'idea che la rotazione debba essere neutralizzata (usando la negazione dell'angolo di rotazione). – Vikram