web-dev-qa-db-fra.com

Mettre en œuvre la boucle de page sur Android?

Je surfais sur le net à la recherche d'un bel effet pour activer les pages Android et il ne semble pas y en avoir un. Depuis que j'apprends la plate-forme, cela semblait être une bonne chose d'être capable de faire est cela.

J'ai réussi à trouver une page ici: 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));
  }  
}

qui donne un exemple (ci-dessus) de code pour iPhone mais je n'ai aucune idée de la façon dont j'implémenterais cela sur Android. L'un des dieux mathématiques pourrait-il m'aider à comprendre comment j'implémenterais cela dans Android Java.

Est-il possible d'utiliser les API de dessin natif, devrais-je utiliser openGL? Puis-je imiter le comportement d'une manière ou d'une autre?

Toute aide serait appréciée. Merci.

****************ÉDITER********************************* *************

J'ai trouvé un exemple de Bitmap Mesh dans les Android API: http://developer.Android.com/resources/samples/ApiDemos/src/com/example/Android/apis /graphics/BitmapMesh.html

Peut-être que quelqu'un pourrait m'aider sur une équation pour simplement plier le coin supérieur droit vers l'intérieur du diagnostic sur la page pour créer un effet similaire auquel je pourrai plus tard appliquer des ombres pour lui donner plus de profondeur?

40
Hamid

Je viens de créer un projet open source qui propose une simulation de boucle de page en 2D en utilisant le canevas natif: https://github.com/moritz-wundke/Android-page-curl Je travaille toujours sur pour ajouter des adaptateurs et autres pour le rendre utilisable en tant que vue autonome.

  • EDIT: Liens mis à jour.
  • EDIT: les fichiers manquants ont été repoussés.
29
Moss

Je fais des expériences sur l'effet de curl de page sur Android en utilisant OpenGL ES pour le moment. C'est en fait un croquis, mais peut-être donne une idée de la façon d'implémenter le curl de page pour vos besoins. Si vous '' re intéressé par l'implémentation de page flip 3D qui est.

Quant à la formule à laquelle vous faites référence - je l'ai essayée et je n'ai pas trop aimé le résultat. Je dirais qu'il ne convient tout simplement pas très bien au petit écran et a commencé à pirater une solution plus simple.

Le code peut être trouvé ici: https://github.com/harism/Android_page_curl/

En écrivant ceci, je suis en train de décider comment implémenter les ombres douces `` fausses '' - et s'il faut créer une application appropriée pour montrer cet effet de boucle de page. C'est aussi à peu près l'une des très rares implémentations d'OpenGL que j'ai jamais faites et ne devrait pas être trop prise comme exemple.

31
harism

Je suis à peu près sûr que vous devrez utiliser OpenGL pour un effet agréable. Les capacités de base de l'interface utilisateur sont assez limitées, vous ne pouvez effectuer des transformations de base (alpha, traduire, pivoter) sur les vues qu'en utilisant des animations.

Il pourrait être possible d'imiter quelque chose comme ça en 2D en utilisant un FrameLayout et une vue personnalisée.

0