cómo hacer un botón desplazable en Android

Hola, estoy tratando de hacer un ecualizador para mi aplicación, pero no puedo entender cómo hacer los botones. Realmente no sé cómo explicarme, así que aquí hay una imagen que revela más que mis palabras: enter image description here

¿Necesito animaciones? ¿Pueden señalarme en la dirección correcta?

Gracias de antemano.

preguntado el 16 de mayo de 11 a las 19:05

Me parece que necesita crear vistas personalizadas que extiendan el botón de imagebutton o imageview y manejar eventos táctiles. Ese es el primer pensamiento de novato. -

@Madcoderz: Quiero crear un ecualizador de música en mi aplicación, ¿puedes ayudarme en eso? -

3 Respuestas

Creo que te refieres a un Barra de busqueda. Es el JSlider de Android.

contestado el 16 de mayo de 11 a las 23:05

Exactamente lo que estaba buscando. Muchas gracias - madcoderz

@Ted encontré este mayor tema con el mismo problema. - Lukas Knuth

Sí, las sugerencias en ese hilo también requieren un widget personalizado. Creo que va a ser mucho más fácil que intentar subclasificar SeekBar y forzarlo a operar verticalmente. - Ted Hopp

Hay un buen tutorial aquí para crear un widget de odómetro. No tiene el aspecto que desea, pero se aplican muchos (la mayoría) de los mismos problemas, incluida la representación personalizada, el manejo de eventos táctiles y la conexión de una serie de sub-widgets en un control más grande. Es lo primero en lo que pensé cuando vi tu gráfico.

contestado el 16 de mayo de 11 a las 23:05

Esto es una barra de búsqueda vertical simple ...

public class SimpleVerticalSeekBar extends SeekBar {

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

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

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

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(h, w, oldh, oldw);
    }

    @Override
    protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(heightMeasureSpec, widthMeasureSpec);
        setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
    }

    protected void onDraw(Canvas c) {
        c.rotate(-90);
        c.translate(-getHeight(), 0);

        super.onDraw(c);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (!isEnabled()) {
            return false;
        }

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_MOVE:
            case MotionEvent.ACTION_UP:
                setProgress(getMax() - (int) (getMax() * event.getY() / getHeight()));
                onSizeChanged(getWidth(), getHeight(), 0, 0);
                break;

            case MotionEvent.ACTION_CANCEL:
                break;
        }
        return true;
    }
}

Respondido 25 Oct 11, 16:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.