web-dev-qa-db-ja.com

Androidでページカールを実装しますか?

Androidでページをオンにするための素敵な効果を探してネットサーフィンをしていましたが、1つだけではないようです。これができます。

ここでページを見つけることができました: 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));
  }  
}

これはiPhoneのコード例(上記)を示していますが、Androidでこれをどのように実装するかはわかりません。 Android Javaでこれを実装する方法を教えてください。

ネイティブの描画APIを使用することは可能ですか、openGLを使用する必要がありますか?どうにかして動作を模倣できますか?

任意の助けをいただければ幸いです。ありがとう。

****************編集********************************* *************

Android API demos: http://developer.Android.com/resources/samples/ApiDemos/src/com/example/Android/apisでビットマップメッシュの例を見つけました/graphics/BitmapMesh.html

たぶん誰かが方程式で助けて、右上隅をページ全体に向かって内側に折り曲げて、後で影を適用して深さを増やすことができる同様の効果を作成できますか?

40
Hamid

ネイティブキャンバスを使用した2Dでのページカールシミュレーションを特徴とするオープンソースプロジェクトを作成しました: https://github.com/moritz-wundke/Android-page-curl アダプタなどを追加して、スタンドアロンビューとして使用できるようにします。

  • 編集:リンクが更新されました。
  • 編集:不足しているファイルがレポにプッシュされました。
29
Moss

現在、OpenGL ESを使用してAndroidでページカール効果の実験を行っています。これは実際にはかなりのスケッチですが、ニーズに合わせてページカールを実装する方法についてのアイデアが得られるかもしれません。つまり、3Dページフリップの実装に興味があります。

あなたが言及している式については-私はそれを試してみましたが、結果があまり好きではありませんでした。私はそれが単に小さな画面にあまりうまく適合せず、より単純な解決策をハッキングし始めたと言うでしょう。

コードはここにあります: https://github.com/harism/Android_page_curl/

これを書いている間、「偽の」ソフトシャドウを実装する方法を決定している最中であり、このページカール効果を誇示する適切なアプリケーションを作成するかどうかを決定しています。また、これは私がこれまで行った数少ないOpenGL実装の1つであり、適切な例としてあまり取り上げるべきではありません。

31
harism

素敵な効果を得るにはOpenGLを使用する必要があると確信しています。基本的なUIフレームワークの機能はかなり制限されており、アニメーションを使用するビューでは基本的な変換(アルファ、変換、回転)のみを行うことができます。

そのため、FrameLayoutとその中のカスタムビューを使用して、2Dのようなものを模倣することが可能かもしれません。