2011-09-30 10 views
7

Con Android SeekBar, normalmente puede arrastrar el pulgar hacia la izquierda o hacia la derecha y el color de progreso amarillo está a la izquierda del pulgar. Quiero exactamente lo contrario, esencialmente volteando el color de progreso amarillo a la derecha del pulgar y volteando toda la barra de búsqueda en el eje y.Android SeekBar Flipped Horizontally

¿Alguien puede indicarme la dirección correcta? ¡Gracias!

Respuesta

19

Después de jugar con algún código, esto es lo que obtuve y parece funcionar bastante bien. Con suerte, ayudará a alguien más en el 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); 
    } 
} 

Este fue lanzado junto con la ayuda de estas dos preguntas:

  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

Ha intentado seekbar.setRotation (180)? Vuelve la barra de búsqueda 180 grados y está boca abajo, lo que significa que el lado izquierdo es máximo, el lado derecho es 0 con el color a la derecha del pulgar. No es necesario crear una barra de búsqueda personalizada de esta manera.

+2

Excepto por el hecho de que SeekBar estaría visualmente al revés. – mhenry

+0

La barra de búsqueda predeterminada tiene el mismo aspecto en la parte superior e inferior, por lo que no está seguro de que haya mucha diferencia. Al menos no he visto ninguna diferencia en mis pruebas – DanLBan

+1

No se puede asumir que SeeBark tendrá el mismo aspecto al revés porque los OEM pueden cambiar el aspecto de la vista nativa de SeekBar. Agregar un gradiente simple desviará la mirada. Es mucho mejor anular mediante programación los eventos onDraw() y onTouchEvent() como en mi respuesta aceptada. – mhenry

Cuestiones relacionadas