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
Respuesta
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.
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
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);
}
}
}
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
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? –
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
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
Android es bastante malo en el manejo de la lona y javascript. Probablemente es por eso que también se congela.
- 1. Similitudes entre el lienzo HTML5 y el lienzo de Android
- 2. La cámara Android se congela después de tomar una foto
- 3. Voltear un lienzo de Android
- 4. WinForms congela
- 5. MCRYPT_DEV_RANDOM se congela pero MCRYPT_DEV_URANDOM funciona
- 6. CKEditor se congela en jQuery UI Reordenar
- 7. Descargando archivos usando Java se congela aleatoriamente
- 8. "git push origin master" se congela
- 9. La aplicación web iPad se congela en el Inicio
- 10. Eclipse Helios x64 (Mac) - El editor JSP se bloquea/congela
- 11. Android - DrawLine de lienzo dentro de ImageView
- 12. Android crear capas en lienzo
- 13. lienzo transparente de Android (vista de superficie)
- 14. Lienzo de escala en Android Bitmap
- 15. Cómo optimizar el dibujo de Lienzo - drawBitmap en Android?
- 16. La eficiencia sobre el lienzo de Android dibujo
- 17. función window.scroll congela firefox
- 18. Desplazar un lienzo suavemente en Android
- 19. copia de estudio visual al portapapeles IDE se congela
- 20. aplicación de WPF se congela por completo durante 1 minuto
- 21. La aplicación se congela después de enviar un tweet
- 22. Visual Studio se congela al cambiar al modo de depuración
- 23. programa 'ab' se congela después de muchas solicitudes, ¿por qué?
- 24. IE6 se congela debido a la configuración de * server *
- 25. Android View.onDraw() siempre tiene un lienzo limpio
- 26. Repositorio privado de Git - se congela al tirar
- 27. Dibujando Nueve Parches en Lienzo (Android)
- 28. cómo intercambiar imágenes en lienzo en android?
- 29. android cómo dibujar triángulo, estrella, cuadrado, corazón en el lienzo
- 30. Android: dibujar un lienzo en un ImageView
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
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
Quizás tenga alguna llamada 'event.preventDefault()' innecesaria? – antyrat