Ir al contenido


Foto

Multtouch in button?


  • Por favor identifícate para responder
2 respuestas en este tema

#1 adriano_servitec

adriano_servitec

    Advanced Member

  • Miembros
  • PipPipPip
  • 91 mensajes
  • LocationCuritiba-Pr - Brasil

Escrito 09 julio 2012 - 10:04

Hola a todos parece tener un foro para Android de código Java aquí

Me pregunto si es posible utilizar en el botón multtouch, porque quiero tocar dos botones al mismo tiempo, sólo que no está funcionando.

Este golpe es para un tambor.
Quiero tocar los dos botones al mismo tiempo.

Aquí está el código que hizo
[java]public void ButtonSimple() {
        final Button btn1 = (Button) findViewById(R.id.bt1);
        btn1.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    rgOpcoes = (RadioGroup) findViewById(R.id.rgSound);
                    int rg = rgOpcoes.getCheckedRadioButtonId();
                    if (rg == R.id.radio0) {
                        sm.playSound(0);
                    } else if (rg == R.id.radio1) {
                        sm.playSound(2);
                    } else if (rg == R.id.radio2) {
                        sm.playSound(4);
                    }
                    return true;
                }
                return false;
            }
        });

        final Button btn3 = (Button) findViewById(R.id.bt3);
        btn3.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    rgOpcoes = (RadioGroup) findViewById(R.id.rgSound);
                    int rg = rgOpcoes.getCheckedRadioButtonId();
                    if (rg == R.id.radio0) {
                        sm.playSound(1);
                    } else if (rg == R.id.radio1) {
                        sm.playSound(3);
                    } else if (rg == R.id.radio2) {
                        sm.playSound(5);
                    }
                    return true;
                }
                return false;
            }
        });
    }[/java]

Gracias.
  • 0

#2 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 10 julio 2012 - 02:57

Dudo que dos botones puedan estar en estado "pulsado" a la misma vez, tampoco lo he comprobado, pero si fuese posible a nivel de estados, en ese caso podrías asignar un evento especial a "pulsar los dos" sin más que, en el primer boton pulsado (cualquiera de los dos) redefines el evento del boton restante para que, si se pulsa ese segundo boton, vaya a un evento especial de "pulsados los dos"... aunque es un poco lioso.

Si no se permiten dos botones pulsados por diseño de java o del SDK, que es lo mas normal, solo te quedaría usar una superficie con los botones falsos pintados, y detectar el multitouch en esa superficie, y si tienes dos dedos uno encima de cada boton "dibujado", pues haces lo que toque.

¿Para que necesitas pulsar dos botones simultaneamente? curiosidad...
  • 0

#3 adriano_servitec

adriano_servitec

    Advanced Member

  • Miembros
  • PipPipPip
  • 91 mensajes
  • LocationCuritiba-Pr - Brasil

Escrito 11 julio 2012 - 08:13

¿Para que necesitas pulsar dos botones simultaneamente? curiosidad...

Gracias Sergio.

Por lo tanto, sería porque la imagen de dos tambores, más resuelto mi problema con ImageView

Voy a dejar publicado por la clase que desea
[java]
import android.view.MotionEvent;
import android.view.View;

public class touchActions {

private View[] ultimaViewPointer = new View[4];


public boolean isOver(View view, View parent, MotionEvent event) {

boolean result = false;

try {

int action = event.getAction();
int ptrId = event.getPointerId(0);
if (event.getPointerCount() > 1)
ptrId = (action & MotionEvent.ACTION_POINTER_ID_MASK) >>> MotionEvent.ACTION_POINTER_ID_SHIFT;

switch (event.getAction()) {
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_1_UP:
case MotionEvent.ACTION_POINTER_2_UP:
case MotionEvent.ACTION_POINTER_3_UP:
ultimaViewPointer[ptrId] = null;
return false;
}

int[] locV = new int[2];
view.getLocationInWindow(locV);
int xL = locV[0];
int xR = xL + view.getWidth();
int yT = locV[1];
int yB = yT + view.getHeight();

int[] locP = new int[2];
parent.getLocationOnScreen(locP);
float x = event.getX(event.findPointerIndex(ptrId)) + locP[0];
float y = event.getY(event.findPointerIndex(ptrId)) + locP[1];

boolean isPointerOver = (xL <= x) && (xR >= x) && (yT <= y)
&& (yB >= y);

if (isPointerOver) {

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_1_DOWN:
case MotionEvent.ACTION_POINTER_2_DOWN:
case MotionEvent.ACTION_POINTER_3_DOWN:
result = true;
ultimaViewPointer[ptrId] = view;
break;
case MotionEvent.ACTION_MOVE:
if (ultimaViewPointer[ptrId] != view) {
result = true;
ultimaViewPointer[ptrId] = view;
}
}
}

} catch (Exception e) {

}

return result;
}
}
[/java]

Sólo tiene que llamar
[java]Controle.setOnTouchListener(new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

if (TouchActions.isOver(img1, v, event)) {
//faça algo [/java]


Ahora tengo una idea de poner RelativeLayout con 4 LinearLayout sobre la imagen, y utilizar las coordenadas X e Y

algo como

[java]if X> image / 2 &&
Y> image / 2[/java]

Bueno, mi idea es jugar cuatro sonidos diferentes en una sola imagen.

Supongo que para obtener las coordenadas correctas de la X e Y debo hacer varios de SI para cada esquina.

La mayoría aún no saben cómo proceder, si alguien tiene alguna idea y quieres colaborar publicar el código que estoy agradecido.

Gracias a todos


  • 0




IP.Board spam blocked by CleanTalk.