2011-09-30 21 views
7

Con Android SeekBar, è possibile trascinare normalmente il pollice verso sinistra o verso destra e il colore di avanzamento giallo si trova a sinistra del pollice. Voglio l'esatto opposto, essenzialmente ribaltando il colore giallo progressivo a destra del pollice e girando l'intera SeekBar sull'asse y.SeekBar Android capovolta orizzontalmente

Qualcuno può indicarmi la giusta direzione? Grazie!

risposta

19

Dopo aver giocherellato con un po 'di codice questo è quello che ho ottenuto e sembra funzionare piuttosto bene. Spero che aiuterà qualcun altro in futuro.

public class ReversedSeekBar extends SeekBar { 

    public ReversedSeekBar(Context context) { 
     super(context); 
    } 

    public ReversedSeekBar(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public ReversedSeekBar(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     float px = this.getWidth()/2.0f; 
     float py = this.getHeight()/2.0f; 

     canvas.scale(-1, 1, px, py); 

     super.onDraw(canvas); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     event.setLocation(this.getWidth() - event.getX(), event.getY()); 

     return super.onTouchEvent(event); 
    } 
} 

questo è stato messo insieme con l'aiuto di queste due domande:

  1. How can you display upside down text with a textview in Android?
  2. How can I get a working vertical SeekBar in Android?
2

Hai provato seekbar.setRotation (180)? Gira la barra di ricerca di 180 gradi ed è capovolta, il che significa che il lato sinistro è massimo, il lato destro è 0 con il colore a destra del pollice. Non c'è bisogno di creare una barra di ricerca personalizzata in questo modo.

+2

Tranne il fatto che SeekBar sarebbe visivamente sottosopra. – mhenry

+0

La barra di ricerca predefinita ha lo stesso aspetto in alto e in basso, quindi non è sicuro che ci sarebbe molta differenza. Almeno non ho visto differenze nei miei test – DanLBan

+1

Non si può presumere che SeeBark abbia lo stesso aspetto capovolto perché gli OEM sono in grado di modificare l'aspetto della vista SeekBar nativa. L'aggiunta di una sfumatura semplice getterà l'aspetto fuori. È molto meglio sovrascrivere a livello di codice gli eventi onDraw() e onTouchEvent() come nella mia risposta accettata. – mhenry