Внедрить скручивание страницы на Android?
Я занимался серфингом в сети, ища приятный эффект для превращения страниц на Android, и там, похоже, не один. Поскольку я изучаю платформу, мне показалось, что это приятно.
Мне удалось найти страницу здесь: 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. Мог ли кто-нибудь из богов Math, пожалуйста, помогите мне в том, как я буду реализовывать это в Android Java.
Можно ли использовать собственные API-интерфейсы рисования, нужно ли мне использовать openGL? Могу ли я каким-то образом изменить поведение?
Любая помощь будет оценена по достоинству. Спасибо.
**************** EDIT ****************************** ****************
Я нашел пример Bitmap Mesh в демонстрационных версиях Android API: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapMesh.html
Может кто-то может помочь мне в уравнении, чтобы просто сложить верхний правый угол внутрь диалоги по всей странице, чтобы создать аналогичный эффект, который я могу позже применить к теням, чтобы увеличить его глубину?
Ответы
Ответ 1
Я только что создал проект с открытым исходным кодом, в котором реализовано моделирование скручивания страниц в 2D с использованием собственного холста: https://github.com/moritz-wundke/android-page-curl
Я все еще работаю над этим, чтобы добавить адаптеры и такие, чтобы сделать его пригодным для использования в качестве автономного представления.
- EDIT: обновлены ссылки.
- EDIT: отсутствующие файлы были перенесены на репо.
Ответ 2
Я сейчас экспериментирую с эффектом зависания страницы на Android с помощью OpenGL ES. Это довольно эскиз на самом деле, но, возможно, дает некоторое представление о том, как реализовать завиток страницы для ваших нужд. Если вы заинтересованы в реализации флип-страницы 3D-страницы, которая есть.
Что касается формулы, о которой вы говорите, я пробовал ее, и мне не очень понравился результат. Я бы сказал, что он просто не подходит для маленького экрана очень хорошо и начал разбирать более простое решение.
Код можно найти здесь:
https://github.com/harism/android_page_curl/
Во время написания этого я поспешил решить, как реализовать "поддельные" мягкие тени, и создать ли подходящее приложение, чтобы показать эффект завивки этой страницы. Кроме того, это почти одна из немногих реализаций OpenGL, которые я когда-либо делал, и ее нельзя воспринимать слишком много, как правильный пример.
Ответ 3
Я уверен, что вам придется использовать OpenGL для приятного эффекта. Основные возможности интерфейса пользовательского интерфейса довольно ограничены, вы можете выполнять базовые преобразования (альфа, переводить, вращать) в представлениях с помощью анимаций.
Можно было бы воспроизвести что-то подобное в 2D, используя FrameLayout, и пользовательский вид в нем.