Ce projet vise à implémenter un page flip de style 3D sur un système Android basé sur OpenGL 2.0.
Pour la version JNI , veuillez visiter : android-PageFlip-JNI
Aperçu
Installation
Prise en charge des versions Android
Usage
Licence
Ajoutez-le à votre build.gradle avec :
allprojects {
repositories {
maven { url " https://jitpack.io " }
}
}
et:
dependencies {
compile ' com.github.eschao:android-PageFlip:1.0.2 '
}
Les versions suivantes ont été testées sur émulateur :
Version Android | Version API | Soutien |
---|---|---|
3.2 | API13 | x |
4.1 | API16 | √ |
4.2 | API17 | √ |
4.3 | API18 | √ |
4.4 | API19 | √ |
5.0 | API21 | √ |
5.1 | API22 | √ |
6.0 | API23 | √ |
7.0 | API24 | √ |
7.1.1 | API25 | √ |
7.+ | API26 | √ |
Crée une classe de vue de surface s'étendant à partir de GLSurfaceView
Implémente l'interface Android Renderer pour dessiner votre contenu sur un bitmap et le définir comme texture de PageFlip
Instancie un objet PageFlip dans le constructeur de votre vue de surface
Configure PageFlip , par exemple : définir la durée de l'animation, le mode page ou les pixels du maillage
Gère les événements Android ci-dessous :
Vous aurez peut-être besoin d'un gestionnaire de messages pour envoyer/recevoir un message de dessin. Veuillez vous référer à PageFlipView dans l'exemple d'application.
Vous aurez peut-être besoin d'un verrou pour éviter les conflits entre le thread principal et le thread de rendu OpenGL. Veuillez vous référer à PageFlipView dans l'exemple d'application.
Pour plus de détails, veuillez jeter un œil à PageFlipView dans un exemple d'application.
La bibliothèque PageFlip fournit quelques configurations pour personnaliser ses comportements. Par exemple : couleur de l’ombre et alpha, pixels du maillage et mode page.
Il existe deux modes de page fournis par PageFlip :
Vous pouvez utiliser activateAutoPage pour activer le mode page automatique ou le désactiver (activer également le mode page unique).
Exemple:
// enable auto page mode
mPageFlip . enableAutopage ( true );
Vous pouvez activer/désactiver l'écran en cliquant pour retourner
Exemple:
// enable clicking to flip
mPageFlip . enableClickToFlip ( true );
Vous pouvez donner un rapport de largeur de page de 0 à 0,5f pour définir une zone de réponse à l'événement de clic afin de déclencher un retournement de page. La valeur par défaut est 0,5f , ce qui signifie que le retournement vers l'arrière se produira si vous cliquez sur la moitié gauche de l'écran et que le retournement vers l'avant commencera si vous cliquez sur la moitié droite de l'écran en mode page unique.
Exemple:
// set ratio with 0.3
mPageFlip . setWidthRatioOfClickToFlip ( 0.3f );
Vous pouvez configurer un auditeur pour indiquer à PageFlip si le retournement avant ou arrière peut se produire.
Exemple:
mPageFlip . setListener ( mListener );
Définissez le nombre de pixels utilisés pour un maillage. Moins le maillage utilise de pixels, plus le dessin est fin et plus les performances sont faibles. La valeur par défaut est de 10 pixels.
Exemple:
mPageFlip . setPixelsOfMesh ( 5 );
Lorsque la page est courbée, elle est en fait traitée comme un demi-cylindre par PageFlip . Vous pouvez définir la taille du demi-cylindre pour modifier la forme du retournement. Étant donné que le demi-cylindre dépend de la longueur de la ligne entre le point de contact et le point d'origine (voir l'illustration ci-dessous), vous devez fournir un rapport de cette longueur de ligne pour indiquer à PageFlip le périmètre du demi-cylindre. La valeur par défaut est 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
Exemple:
mPageFlip . setSemiPerimeterRatio ( 0.6f );
Vous pouvez définir le masque alpha pour le dos de la page pliée lorsque la page est courbée en mode page unique. La valeur par défaut est 0,6f.
Exemple:
mPageFlip . setMaskAlphaOfFold ( 0.5f );
Vous pouvez définir la couleur de début/fin et l’alpha de début/fin pour l’ombre du bord de la page pliée.
Exemple:
// 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 );
Vous pouvez définir la couleur de début/fin et l’alpha de début/fin pour l’ombre de base de la page pliée.
Exemple:
mPageFlip . setShadowColorOfFoldBase ( 0.05f , 0.2f , 0.5f , 1f );
Lorsque la page est courbée, la taille de la page pliée suivra le mouvement du doigt pour être modifiée et la largeur de l'ombre de son bord doit être modifiée en conséquence. Vous pouvez définir une plage de largeur appropriée pour la largeur de l'ombre.
Exemple:
// 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 );
Comme la largeur de l'ombre du bord de la page pliée , vous pouvez définir une plage de largeur appropriée pour l'ombre de base de la page pliée.
Exemple:
// see {@link #setShadowWidthOfFoldEdges} function
mPageFlip . setShadowWidthOfFoldBase ( 5 , 40 , 0.4f );
Vous pouvez donner une durée pour l'animation inversée lorsque vous appelez la fonction onFingerUp pour gérer l'événement doigt levé.
Exemple:
// the last parameter is duration with millisecond unit, here we set it with 2 seconds.
mPageFlip . onFingerUp ( x , y , 2000 );
Ce projet est sous licence Apache License Version 2.0.