Este projeto tem como objetivo implementar a virada de página no estilo 3D em sistema Android baseado em OpenGL 2.0.
Para a versão JNI , visite: android-PageFlip-JNI
Visualização
Instalação
Suporte à versão Android
Uso
Licença
Adicione-o ao seu build.gradle com:
allprojects {
repositories {
maven { url " https://jitpack.io " }
}
}
e:
dependencies {
compile ' com.github.eschao:android-PageFlip:1.0.2 '
}
As seguintes versões foram testadas no emulador:
Versão Android | Versão da API | Apoiar |
---|---|---|
3.2 | API 13 | x |
4.1 | API 16 | √ |
4.2 | API 17 | √ |
4.3 | API 18 | √ |
4.4 | API 19 | √ |
5,0 | API 21 | √ |
5.1 | API 22 | √ |
6,0 | API 23 | √ |
7,0 | API 24 | √ |
7.1.1 | API 25 | √ |
7.+ | API 26 | √ |
Cria uma classe de vista de superfície estendendo-se de GLSurfaceView
Implementa a interface Android Renderer para desenhar seu conteúdo em um bitmap e defini-lo como uma textura do PageFlip
Instancia um objeto PageFlip no construtor da sua visualização de superfície
Configura PageFlip , por exemplo: definir duração da animação, modo de página ou pixels de malha
Lida com os eventos Android abaixo:
Você pode precisar de um manipulador de mensagens para enviar/receber uma mensagem de desenho. Consulte PageFlipView no aplicativo de exemplo.
Você pode precisar de um bloqueio para evitar conflitos entre o thread principal e o thread de renderização OpenGL. Consulte PageFlipView no aplicativo de exemplo.
Mais detalhes, dê uma olhada no PageFlipView no aplicativo de exemplo.
A biblioteca PageFlip fornece algumas configurações para personalizar seus comportamentos. Por exemplo: cor da sombra e alfa, pixels de malha e modo de página.
Existem dois modos de página fornecidos pelo PageFlip :
Você pode usar enableAutoPage para ativar o modo de página automática ou desativá-lo (habilitar igualmente o modo de página única).
Exemplo:
// enable auto page mode
mPageFlip . enableAutopage ( true );
Você pode ativar/desativar a tela de clique para virar
Exemplo:
// enable clicking to flip
mPageFlip . enableClickToFlip ( true );
Você pode fornecer uma proporção de largura da página de 0 a 0,5f para definir uma área para o evento de clique de resposta para acionar uma virada de página. O valor padrão é 0.5f , o que significa que o retrocesso acontecerá se você clicar na metade esquerda da tela e o retrocesso começará se você clicar na metade direita da tela no modo de página única.
Exemplo:
// set ratio with 0.3
mPageFlip . setWidthRatioOfClickToFlip ( 0.3f );
Você pode configurar um ouvinte para informar ao PageFlip se o movimento para frente ou para trás pode acontecer.
Exemplo:
mPageFlip . setListener ( mListener );
Defina quantos pixels são usados para uma malha. Quanto menos pixels a malha usar, mais fino será o desenho e menor será o desempenho. O valor padrão é 10 pixels.
Exemplo:
mPageFlip . setPixelsOfMesh ( 5 );
Quando a página é enrolada, ela é tratada como um semicilindro pelo PageFlip . Você pode definir o tamanho do semicilindro para alterar o formato do flip. Como o semicilindro depende do comprimento da linha do ponto de contato ao ponto original (veja a ilustração abaixo), você precisa fornecer uma proporção desse comprimento de linha para informar ao PageFlip o perímetro do semicilindro. O valor padrão é 0,8f.
+----------------+
| touchP |
| . |
| |
| + p0 |
| |
| |
| p1 + |
| |
+----------------+
original point, that means you drag the page from here to touch point(touchP)
The length from p0 to p1 is peremeter of semi-cylinder and determined by ratio your giving
Exemplo:
mPageFlip . setSemiPerimeterRatio ( 0.6f );
Você pode definir a máscara alfa para o verso da página dobrada quando a página estiver enrolada no modo de página única. O valor padrão é 0,6f.
Exemplo:
mPageFlip . setMaskAlphaOfFold ( 0.5f );
Você pode definir a cor inicial/final e o alfa inicial/final para a sombra da borda da página dobrada.
Exemplo:
// set start color with 0.1f, start alpha with 0.2f, end color with 0.5f
// and end alpha with 1f
mPageFlip . setShadowColorOfFoldBase ( 0.1f , 0.2f , 0.5f , 1f );
Você pode definir a cor inicial/final e o alfa inicial/final para a sombra base da página dobrada.
Exemplo:
mPageFlip . setShadowColorOfFoldBase ( 0.05f , 0.2f , 0.5f , 1f );
Quando a página estiver enrolada, o tamanho da página dobrada seguirá o movimento do dedo a ser alterado e a largura da sombra da borda deverá ser alterada de acordo. Você pode definir um intervalo de largura apropriado para a largura da sombra.
Exemplo:
// set the minimal width is 5 pixels and maximum width is 40 pixels.
// set the ratio is 0.3f which means the width will be firstly computed by formula:
// width = diameter of semi-cylinder * 0.3f, and then compare it with minimal
// and maximal value to make sure the width is in range.
mPageFlip . setShadowWidthOfFoldEdges ( 5 , 40 , 0.3f );
Assim como a largura da sombra da borda da página dobrada , você pode definir um intervalo de largura apropriado para a sombra base da página dobrada.
Exemplo:
// see {@link #setShadowWidthOfFoldEdges} function
mPageFlip . setShadowWidthOfFoldBase ( 5 , 40 , 0.4f );
Você pode definir uma duração para a animação de inversão ao chamar a função onFingerUp para lidar com o evento de dedo para cima.
Exemplo:
// the last parameter is duration with millisecond unit, here we set it with 2 seconds.
mPageFlip . onFingerUp ( x , y , 2000 );
Este projeto está licenciado sob a Licença Apache Versão 2.0.