Un modo semplice sarebbe quella di utilizzare tela attinge per disegnare forme 4 lati.
Considerare ogni 4 angoli. Il rettangolo "intoccato" sarebbe a grandezza naturale, il rettangolo toccato sarebbe più piccolo.
Hai solo bisogno di attirare la vostra forma a quattro lati con un punto a calcolare per ogni parte del rettangolo. È possibile ottenere la posizione tattile, quindi calcolare il "peso" per ogni punto.
per calcolare ogni angolo, è necessario capire quanto "peso" deve essere assegnato alla coordinata toccata e quanto "peso" deve essere assegnato alla coordinata non toccata. Se tocchi l'angolo in alto a sinistra, quell'angolo userebbe il 100% della coordinata toccata e gli altri tre angoli utilizzerebbero tutte le coordinate intatte.
Se si tocca la metà superiore, si otterrebbe una forma simile a questo:
Possiamo calcolare gli angoli di tutto il punto tocco, calcolando quanto lontano da un angolo il tuo tocco è
float untouchedXWeight1 = Math.abs(xt - x1)/width;
//maximum of 1, minimum of 0
float untouchedYWeight1 = Math.abs(yt - y1)/height;
float untouchedWeight1 = (untouchedXWeight1 + untouchedYWeight1)/2;
//also maximum of 1, minimum of 0
float touchedWeight1 = 1 - untouchedWeight1;
così con quei pesi, è possibile calcolare il vostro posizioni X e Y per quell'angolo:
x1 = xUntouched1 * untouchedWeight + xTouched1 * touchedWeight1;
y1 = yUntouched1 * untouchedWeight + yTouched1 * touchedWeight1;
Poi fare in modo simile per gli altri 3 angoli.
Non ho potuto applicare questo a un ViewGroup. Avete qualche idea in merito? – frankish
Hai già provato a utilizzare GLSurfaceView? – HalR
in questa domanda: http://stackoverflow.com/questions/7734228/android-accessing-buttons-from-surfaceview una delle risposte mostra le basi: – HalR