Zaimplementować page curl na Androida?

Surfowałem po necie szukając fajnego efektu do przewracania stron na Androidzie i po prostu nie ma takiego. Ponieważ uczę się platformy, wydawało się, że miłą rzeczą jest to, że mogę to zrobić.

Udało mi się znaleźć stronę tutaj: 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));
  }  
}

To daje przykładowy (powyżej) kod dla iPhone ' a, ale nie mam pojęcia, jak mógłbym go wdrożyć na Androida. Czy któraś z Matm bogowie tam, proszę, pomóż mi z tym, jak bym poszedł o implementacji tego w Android Java.

Czy jest możliwe używanie natywnych API rysowania, czy muszę używać openGL? Czy mogę jakoś naśladować zachowanie?

Każda pomoc będzie mile widziana. Dzięki.

****************edytuj**********************************************

Znalazłem przykład siatki bitmapowej w demie API Androida: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.html

Może ktoś mógłby mi pomóc w równaniu, aby po prostu złożyć prawy górny róg do wewnątrz na całej stronie, aby stworzyć podobny efekt, który mogę później zastosować cienie do gie to więcej głębi?

Author: Neal L, 2010-10-12

3 answers

Właśnie stworzyłem projekt open source, który zawiera symulację zwijania strony w 2D przy użyciu natywnego płótna: https://github.com/moritz-wundke/android-page-curl Nadal pracuję nad tym, aby dodać Adaptery i takie, aby można było z niego korzystać jako samodzielny widok.

  • EDIT: linki zaktualizowane.
  • EDIT: brakujące pliki zostały wypchnięte do repo.
 29
Author: Moss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-16 10:08:11

Robię eksperymenty na efekt page curl na Androida przy użyciu OpenGL ES w tej chwili. To całkiem niezły szkic, ale może daje jakiś pomysł, jak zaimplementować page curl do swoich potrzeb. Jeśli interesuje Cię implementacja 3D page flip czyli

Jeśli chodzi o formułę, do której się odnosisz - wypróbowałem ją i za bardzo nie spodobał mi się wynik. Powiedziałbym, że po prostu nie pasuje do małego ekranu bardzo dobrze i zaczął hakować prostsze rozwiązanie.

Kod można znaleźć proszę.: https://github.com/harism/android_page_curl/

Podczas pisania tego jestem w trakcie decydowania, jak zaimplementować "fałszywe" miękkie cienie - i czy stworzyć odpowiednią aplikację, aby pokazać ten efekt curl strony. Jest to również jedna z niewielu implementacji OpenGL, które kiedykolwiek wykonałem i nie powinno być brane za dobry przykład.

 30
Author: harism,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-11 23:53:13

Jestem całkiem pewien, że trzeba by użyć OpenGL dla miłego efektu. Możliwości basic UI framework są dość ograniczone, można wykonywać tylko podstawowe przekształcenia (alpha, translate, rotate) na widokach za pomocą animacji.

Tho może być możliwe, aby naśladować coś takiego w 2D za pomocą FrameLayout, i niestandardowy widok w nim.

 0
Author: Zsombor Erdődy-Nagy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-12 08:59:03