2013-01-16 2 views
5

Ci sono due pulsanti grafici adiacenti. Se utilizzo il metodo di calcolo delle coordinate, tocca TouchEvent, devo creare una vasta gamma di coordinate. Forse c'è un altro metodo?Come impostare il pulsante con un poligono di contorno? Android

ImageButton

+0

Che aspetto hanno esattamente i pulsanti? – Luksprog

+0

No, il design non è finito, ora sto a un bivio, voglio fare un pulsante trapezoidale, se trovo una soluzione al mio problema – Roman

risposta

7

Probabilmente non è la soluzione migliore, ma si potrebbe sovrapporre due pulsanti ognuno dei quali rappresenta una parte dell'immagine (nero o bianco) e fare il resto dell'immagine s' il Button trasparente (le immagini avranno la stesse dimensioni per entrambi i pulsanti). Sarà inoltre necessario estendere la classe Button per ignorare il modo in cui il metodo onTouchEvent gestisce gli eventi tattili, a seconda del punto in cui il tocco si è verificato in un punto trasparente o in un punto "immagine". Ho fatto un piccolo progetto di esempio l'ottenimento di un Button con due parti come di seguito (ignorare le mie abilità di progettazione):

enter image description here

È possibile trovare il project here, è piuttosto auto esplicativo. Vedi se ti aiuta.

+1

Grazie per la soluzione. Mi ha aiutato. Tuttavia, ho riscontrato un problema con il tuo campione. Se il drawable non è in "wrap_content" (ad esempio, fill_parent), il progetto si bloccherà. Ho risolto creando la bitmap così:. bitmap b = Bitmap.createScaledBitmap ( \t \t ((BitmapDrawable) bkg.getCurrent()) getBitmap(), \t \t getWidth(), \t \t getHeight (), \t \t true \t); –

+1

@Sebastien Hai ragione, il mio codice non ha preso in considerazione la modifica della dimensione della vista (o maggiore della stessa Bitmap). Ho corretto il campione e sto ridimensionando il 'Bitmap' nel callback' onSizeChanged' in modo che abbia sempre la dimensione corretta. – Luksprog

+0

La tua soluzione è migliore che la mia (per farlo in onSizeChanged). Grazie ancora :) Tuttavia, l'ho migliorato di nuovo, prima di creare la bitmap, ho aggiunto questo codice: // Bitmap occupa molto spazio nella memoria, libera la memoria il prima possibile \t if (mBitmap! = Null) { \t mBitmap.recycle(); \t} –