2013-03-16 9 views

risposta

7

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.

Touched and untouched boxes

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.

touched top left corner

Se si tocca la metà superiore, si otterrebbe una forma simile a questo:

touched top middle

Possiamo calcolare gli angoli di tutto il punto tocco, calcolando quanto lontano da un angolo il tuo tocco è

touched bottom left

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.

+0

Non ho potuto applicare questo a un ViewGroup. Avete qualche idea in merito? – frankish

+0

Hai già provato a utilizzare GLSurfaceView? – HalR

+0

in questa domanda: http://stackoverflow.com/questions/7734228/android-accessing-buttons-from-surfaceview una delle risposte mostra le basi: – HalR

Problemi correlati