example custom changes animate activity android math transition

custom - Implementar página curl en Android?



image transition android (3)

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 demás. hacerlo utilizable como una vista independiente.

  • EDITAR: Enlaces actualizados.
  • EDITAR: los archivos perdidos se han enviado al repositorio.

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.

Logré 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)); } }

eso da un código de ejemplo (arriba) para iPhone, pero no tengo idea de cómo implementarlo en Android. ¿Podría alguno de los dioses de Matemáticas por favor ayudarme sobre cómo implementar esto en Android Java?

¿Es posible usar las API nativas, debería usar OpenGL? ¿Podría mimik el comportamiento de alguna manera?

Cualquier ayuda sería apreciada. Gracias.

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

Encontré un ejemplo de Malla de mapa de bits 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 podría ayudarme en una ecuación para simplemente doblar la esquina superior derecha hacia adentro diagnosticando toda la página para crear un efecto similar que luego pueda aplicar sombras para obtener más profundidad?


Estoy bastante seguro de que tendrías que usar OpenGL para obtener un buen efecto. 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.

Aunque podría ser posible imitar algo así en 2D utilizando un FrameLayout y una vista personalizada en él.


Estoy experimentando 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 a la que se refiere, la probé y no me gustó demasiado el resultado. 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.

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

Mientras escribo esto, estoy a punto de decidir cómo implementar sombras suaves ''falsas'' y si crear una aplicación adecuada para mostrar el efecto de curvatura de esta página. Además, esta es una de las pocas implementaciones de OpenGL que he hecho y no debería tomarse demasiado como un ejemplo adecuado.