2012-04-09 14 views
5

Tengo una aplicación de JavaScript que se ejecuta en un lienzo. Funciona en Android, excepto que cuando arrastras la pantalla con el dedo, toda la página web se congela. ¿Hay alguna forma de evitar que esto ocurra?El lienzo de Android se congela

+1

Si se cubre la lona con un div transparente todavía se presenta el problema? Solo para ver si es el elemento toque en el lienzo ese es el problema. – GillesC

+0

Lo intentaré cuando llegue a casa, pero creo que el problema tiene que ver con la pantalla que intenta desplazarse/acercar. Se bloquea incluso cuando arrastro mi dedo fuera del lienzo. – Joel

+1

Quizás tenga alguna llamada 'event.preventDefault()' innecesaria? – antyrat

Respuesta

0

Dependiendo de lo que tenga en su código, es posible que se produzca una gran cantidad de procesamiento cuando alguien arrastra su dedo (o mouse) a través de un lienzo. En aplicaciones de pintura, por ejemplo, la posición XY del enfoque del usuario se captura cada vez que cambia píxeles. Si el código dentro de cada uno de estos pequeños eventos no es claro, el cliente se bloqueará mientras trata de ponerse al día.

+0

No se ejecuta ningún código adicional cuando se arrastra el dedo. El código continúa ejecutándose normalmente, pero no repinta el lienzo. – Joel

1

Depende de lo que hagas en tu código en un MotionEvent.ACTION_DOWN y MOVE ... deberías tener alguna rutina dibujando el lienzo. Esa rutina no debe ser interrumpida por ninguna otra rutina.

No estoy seguro de si esto soluciona su problema o proporciona alguna idea, pero aquí va;

Por ejemplo;

protected void onDraw(Canvas canvas) { 
    // fills the canvas with black 
    canvas.drawColor(Color.BLACK); 
    // draw some stuff on it 
    backGnd.draw(canvas); 
    basket.draw(canvas); 
    for (int i = 0; i < AppleList.size();i++){ 
     AppleList.get(i).draw(canvas); 
    } 
} 

El motionevent se manejará de la siguiente manera (tenga en cuenta el comentario en el código!);

@Override 
public boolean onTouchEvent(MotionEvent event) { 

if (!isTouchDisabled){ 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 

     // add code to pass the action down to the objects 
      basket.handleActionDown((int)event.getX(), (int)event.getY()); 
      } 

      if (event.getAction() == MotionEvent.ACTION_MOVE) { 
      // the gestures 

     // only pass the move events to the objects that were previously touched (so action down entails checking for 
     // the location of the touch AND the object.. if they match, you set isTouched to true. 

     if (basket.isTouched()) { 
      // the basket was picked up and is being dragged 
      basket.setX((int)event.getX()); 
      basket.setY((int)event.getY()); 

      } 
      } 

      if (event.getAction() == MotionEvent.ACTION_UP) { 
      // Check buttons 
       if (btnMoreFruit.isTouched()){ 
        btnMoreFruit.handleActionUp((int) event.getX(), (int) event.getY()); 
        btnMoreFruit.setTouched(false); 
       } 
       if (btnLessFruit.isTouched()){ 
        btnLessFruit.handleActionUp(this.getContext(), (int)event.getX(), (int)event.getY()); 
        btnLessFruit.setTouched(false); 
       } 

      } 
} 
+0

Estoy tratando de escribir Javascript para ejecutar en el navegador de Android. A menos que realmente me falta algo, me diste java para ejecutar en una aplicación de Android. El problema sería bastante fácil de resolver si estuviera escribiendo una aplicación. – Joel

+0

Ah ... Perdón, no entendí eso. No puedo ayudarte allí. ¿Probaste diferentes navegadores? (FF, Opera, Dolphin) solo para verificar y determinar la causa raíz? –

+0

intenté con lo que pude en mi Kindle Fire, nada parecía funcionar del todo, aunque algunos eran mejores que otros. No creo que sea posible solucionar el problema, pero pensé que renunciaría a alguna recompensa para descubrir si alguien tenía una solución mágica. Aunque es un problema importante para las aplicaciones web. – Joel

2

La forma en que usted representa su pregunta no es muy rica en información.

las aplicaciones web tienen algunas de las limitaciones para adquirir la función completa de Android.

Tu declaración Tengo una aplicación de javascript que se ejecuta en un lienzo, en un primer aspecto parece que estás utilizando el lienzo de Android en tu aplicación.

aquí es el link

que puede ayudarle a ejecutar canvas de HTML5 en Android

Cuestiones relacionadas