40 votes

Mettre en œuvre curl de page sur Android?

J'ai été surfer sur le net à la recherche d'un bel effet pour tourner les pages sur Android, et il ne semble pas en être un. Depuis que je suis en train d'apprendre la plate-forme, il semblait comme une belle chose d'être en mesure de faire est de cette.

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

que donne un exemple (ci-dessus) code pour iPhone, mais je n'ai aucune idée de comment je pourrais aller sur l'implémentation de ce sur android. On pouvait tout de la de Mathématiques dieux hors s'il vous plaît m'aider avec la façon dont j'allais au sujet de la mise en œuvre de cette sous Android Java.

Est-il possible d'utiliser le native attirer l'Api, aurais-je utiliser openGL? Pourrais-je mimik le comportement d'une certaine manière?

Toute aide serait appréciée. Merci.

*******EDIT*************************

J'ai trouvé une image Bitmap en Maille exemple dans l'API Android démos: 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 de simplement plier le coin supérieur droit vers l'intérieur diagnally en travers de la page pour créer un effet similaire que je peux appliquer des ombres à gie encore plus de profondeur?

31voto

harism Points 3299

Je suis en train de faire quelques tests sur la page curl effet sur Android en utilisant OpenGL ES pour le moment. Il est tout à fait une esquisse, effectivement, mais peut-être donner une idée de la façon de mettre en œuvre la page curl pour vos besoins. Si vous êtes intéressé par la 3D page flip mise en œuvre.

Comme pour la formule que vous faites allusion à l' - je l'ai essayé et n'ai pas du tout aimé le résultat de trop. Je dirais simplement, il ne rentre pas petit écran très bien et a commencé à pirater une solution plus simple.

Code peut être trouvé ici: https://github.com/harism/android_page_curl/

Lors de l'écriture de ce que je suis en train de décider de la façon de mettre en œuvre des "faux" ombres douces - et si vous voulez créer une application correcte de montrer cette page curl effet. Aussi c'est à peu près l'un des très rares implémentations d'OpenGL que j'ai jamais fait et ne devrait pas être pris trop comme un bon exemple.

29voto

Moss Points 3813

Je viens de créer un projet open source qui propose une simulation de courbe de page en 2D à l'aide du canevas natif: http://code.google.com/p/android-page-curl/ J'y travaille toujours pour ajouter des adaptateurs, etc. pour le rendre utilisable en tant que vue autonome.

  • EDIT: Liens mis à jour.
  • EDIT: Les fichiers manquants ont été envoyés au repo.

0voto

Je suis sûr que vous devrez utiliser OpenGL pour obtenir un bel effet. Les capacités du cadre d'interface utilisateur de base sont assez limitées, vous ne pouvez effectuer que des transformations de base (alpha, translation, rotation) sur les vues à l'aide d'animations.

Il serait peut-être possible d’imiter quelque chose comme cela en 2D en utilisant un FrameLayout et une vue personnalisée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: