2010-10-12 9 views
40

Estaba navegando por la red buscando un buen efecto para pasar páginas en Android y simplemente no parece ser una. Desde que estoy aprendiendo la plataforma, me pareció que algo bueno poder hacer es esto.¿Implementar la página curl en Android?

he conseguido encontrar una página aquí: http://wdnuon.blogspot.com/2010/05/implementing-ibooks-page-curling-using.html

- (void)deform 
{ 
    Vertex2f vi; // Current input vertex 
    Vertex3f v1; // First stage of the deformation 
    Vertex3f *vo; // Pointer to the finished vertex 
CGFloat R, r, beta; 
    for (ushort ii = 0; ii < numVertices_; ii++) 
    { 
    // Get the current input vertex. 
    vi = inputMesh_[ii];      
    // Radius of the circle circumscribed by vertex (vi.x, vi.y) around A on the x-y plane 
    R  = sqrt(vi.x * vi.x + pow(vi.y - A, 2)); 
    // Now get the radius of the cone cross section intersected by our vertex in 3D space. 
    r  = R * sin(theta);      
    // Angle subtended by arc |ST| on the cone cross section. 
    beta = asin(vi.x/R)/sin(theta);  

// *** MAGIC!!! *** 
v1.x = r * sin(beta); 
v1.y = R + A - r * (1 - cos(beta)) * sin(theta); 
v1.z = r * (1 - cos(beta)) * cos(theta); 
// Apply a basic rotation transform around the y axis to rotate the curled page. 


// These two steps could be combined through simple substitution, but are left 
    // separate to keep the math simple for debugging and illustrative purposes. 
    vo = &outputMesh_[ii]; 
    vo->x = (v1.x * cos(rho) - v1.z * sin(rho)); 
    vo->y = v1.y; 
    vo->z = (v1.x * sin(rho) + v1.z * cos(rho)); 
    } 
} 

que da un ejemplo de código para iPhone (arriba) pero no tengo ni idea de cómo iba a ir sobre la aplicación de esta en android. ¿Podría alguno de los dioses de Matemáticas por favor ayudarme sobre cómo implementar esto en Android Java?

¿Es posible uso de la API de dibujo nativas, tendría que usar OpenGL? ¿Podría mimik el comportamiento de alguna manera?

Cualquier ayuda sería apreciada. Gracias.

**************** EDITAR ***************************** *****************

he encontrado un ejemplo de mapa de bits de malla en las demostraciones de la API de Android: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.html

Tal vez alguien me podría ayudar en una ecuación a veces simplemente la esquina superior derecha hacia adentro diagnostica en toda la página para crear un efecto similar que luego pueda aplicar sombras para obtener más profundidad?

Respuesta

29

Acabo de crear un proyecto de código abierto que presenta una simulación de curl de página en 2D utilizando el lienzo nativo: https://github.com/moritz-wundke/android-page-curl Todavía estoy trabajando en ello para agregar adaptadores y tal que sea utilizable como una vista independiente.

  • EDITAR: Enlaces actualizados.
  • EDITAR: Los archivos faltantes se han enviado al repositorio.
+0

que muy bien, sigue, creo que puedes hacer más bien – pengwang

+0

¡Voy a comprometer una nueva versión pronto que actúa como un ListView y así podrás agregar cualquier tipo de vista en él! – Moss

+0

Interesante pero aún necesita ser una vista independiente. – Hamid

0

Estoy bastante seguro de que usted tendría que usar OpenGL para un efecto agradable. Las capacidades básicas del marco de la interfaz de usuario son bastante limitadas, solo puede realizar transformaciones básicas (alfa, traducir, rotar) en vistas usando animaciones.

Tho podría ser posible para imitar algo así en 2D utilizando un FrameLayout, y una costumbre Vista en ella.

+0

Bueno me encontré Bitmapmesh en las demostraciones de la API, así que si puedo crear una malla, les aseguro que puede transformar de alguna manera?La demo no está bien documentada, así que estoy teniendo dificultades para descubrirla, pero se puede encontrar aquí: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/ graphics/BitmapMesh.html – Hamid

+0

Logré agarrarme de la malla, el problema ahora es crear la ecuación matemática para realizar la transformación en la malla. – Hamid

+0

Hola, ¿Es posible en el curvatura de la página para las pestañas de deslizamiento de la barra de acción? – Steve

30

Estoy haciendo algo de experimentación en el efecto de curl de página en Android usando OpenGL ES en este momento. Es un boceto en realidad, pero tal vez le da una idea de cómo implementar la curva de la página para sus necesidades. Si está interesado en la implementación de la página en 3D, eso es.

En cuanto a la fórmula que usted se refiere - Yo probé y no le gustó el resultado demasiado. Yo diría que simplemente no se ajusta muy bien a la pantalla pequeña y comenzó a hackear una solución más simple.

Código se puede encontrar aquí: https://github.com/harism/android_page_curl/

Al escribir esto, estoy en medio de decidir cómo poner en práctica las sombras suaves 'falsos' - y si se debe crear una aplicación adecuada para mostrar esta página efecto rizo . Además, esta es una de las pocas implementaciones de OpenGL que he hecho y no debería tomarse demasiado como un ejemplo adecuado.

+0

Gracias, voy a echar un vistazo. – Hamid

+0

De todos modos, como mi código tiende a ser algo ilegible, estoy usando una idea bastante similar a la del código que proporcionó. Con la diferencia, estoy haciendo rizos alrededor de un cilindro en lugar de un cono. Esto hace que sea mucho más fácil calcular la posición del rizo de modo que el borde de la superficie rizada siga al puntero en todo momento. Y al final estoy gastando mucho más esfuerzo en crear una tira de triángulo válida para el renderizado que haciendo cálculos reales. – harism

+0

¡Gracias! El tuyo es el primer código que he podido simplemente insertar en un nuevo proyecto de "fuente existente" y ejecutarlo. :-) –

Cuestiones relacionadas