โครงการนี้มีวัตถุประสงค์เพื่อใช้การพลิกหน้าสไตล์ 3 มิติบนระบบ Android ที่ใช้ OpenGL 2.0
สำหรับเวอร์ชัน JNI โปรดไปที่: android-PageFlip-JNI
ดูตัวอย่าง
การติดตั้ง
รองรับเวอร์ชัน Android
การใช้งาน
ใบอนุญาต
เพิ่มลงใน build.gradle ของคุณด้วย:
allprojects {
repositories {
maven { url " https://jitpack.io " }
}
}
และ:
dependencies {
compile ' com.github.eschao:android-PageFlip:1.0.2 '
}
เวอร์ชันต่อไปนี้ได้รับการทดสอบบนโปรแกรมจำลอง:
เวอร์ชัน Android | เวอร์ชันเอพีไอ | สนับสนุน |
---|---|---|
3.2 | เอพีไอ 13 | x |
4.1 | เอพีไอ 16 | |
4.2 | เอพีไอ 17 | |
4.3 | เอพีไอ 18 | |
4.4 | เอพีไอ 19 | |
5.0 | เอพีไอ 21 | |
5.1 | เอพีไอ 22 | |
6.0 | เอพีไอ 23 | |
7.0 | เอพีไอ 24 | |
7.1.1 | เอพีไอ 25 | |
7.+ | เอพีไอ 26 |
สร้างคลาสมุมมองพื้นผิวที่ขยายจาก GLSurfaceView
ใช้อินเทอร์เฟซ Android Renderer เพื่อวาดเนื้อหาของคุณบนบิตแมปและตั้งค่าเป็นพื้นผิวของ PageFlip
สร้างอินสแตนซ์วัตถุ PageFlip ในตัวสร้างมุมมองพื้นผิวของคุณ
กำหนดค่า PageFlip เช่น ตั้งค่าระยะเวลาภาพเคลื่อนไหว โหมดเพจ หรือพิกเซลแบบตาข่าย
จัดการกับเหตุการณ์ Android ด้านล่าง:
คุณอาจจำเป็นต้องมีตัวจัดการข้อความในการส่ง/รับข้อความรูปวาด โปรดดู PageFlipView ในแอปพลิเคชันตัวอย่าง
คุณอาจต้องล็อคเพื่อหลีกเลี่ยงความขัดแย้งระหว่างเธรดหลักและเธรดการแสดงผล OpenGL โปรดดู PageFlipView ในแอปพลิเคชันตัวอย่าง
รายละเอียดเพิ่มเติม โปรดดู PageFlipView ในแอปพลิเคชันตัวอย่าง
ไลบรารี PageFlip มีการกำหนดค่าบางอย่างสำหรับปรับแต่งลักษณะการทำงาน ตัวอย่างเช่น: สีเงาและอัลฟ่า, พิกเซลแบบเมช และโหมดเพจ
PageFlip มีโหมดเพจสองโหมด:
คุณสามารถใช้ EnableAutoPage เพื่อเปิดใช้งานโหมดเพจอัตโนมัติหรือปิดใช้งานได้ (เปิดใช้งานโหมดเพจเดียวเท่ากัน)
ตัวอย่าง:
// enable auto page mode
mPageFlip . enableAutopage ( true );
คุณสามารถเปิด/ปิดหน้าจอการคลิกเพื่อพลิกได้
ตัวอย่าง:
// enable clicking to flip
mPageFlip . enableClickToFlip ( true );
คุณสามารถกำหนดอัตราส่วนความกว้างของหน้าได้ตั้งแต่ 0 ถึง 0.5f เพื่อกำหนดพื้นที่สำหรับการตอบกลับเหตุการณ์การคลิกเพื่อทริกเกอร์การพลิกหน้า ค่าเริ่มต้นคือ 0.5f ซึ่งหมายความว่าการพลิกกลับจะเกิดขึ้นหากคุณคลิกครึ่งซ้ายของหน้าจอ และการพลิกไปข้างหน้าจะเริ่มขึ้นหากคุณคลิกครึ่งขวาของหน้าจอในโหมดหน้าเดียว
ตัวอย่าง:
// set ratio with 0.3
mPageFlip . setWidthRatioOfClickToFlip ( 0.3f );
คุณสามารถตั้งค่าให้ผู้ฟังบอก PageFlip ได้หากอาจเกิดการพลิกไปข้างหน้าหรือถอยหลังได้
ตัวอย่าง:
mPageFlip . setListener ( mListener );
กำหนดจำนวนพิกเซลที่ใช้สำหรับเมช ยิ่งใช้พิกเซลน้อยลง การวาดภาพก็จะละเอียดยิ่งขึ้นและประสิทธิภาพก็จะยิ่งต่ำลง ค่าเริ่มต้นคือ 10 พิกเซล
ตัวอย่าง:
mPageFlip . setPixelsOfMesh ( 5 );
เมื่อเพจถูกม้วนงอ PageFlip จะถูกจัดการเป็นกึ่งทรงกระบอก คุณสามารถกำหนดขนาดของกึ่งสูบเพื่อเปลี่ยนรูปทรงพลิกได้ เนื่องจากกึ่งทรงกระบอกขึ้นอยู่กับความยาวของเส้นจากจุดสัมผัสไปยังจุดเดิม (ดูภาพประกอบด้านล่าง) คุณจึงต้องระบุอัตราส่วนของความยาวเส้นนี้เพื่อบอก PageFlip ถึงความยาวเส้นรอบวงของกึ่งทรงกระบอก ค่าเริ่มต้นคือ 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
ตัวอย่าง:
mPageFlip . setSemiPerimeterRatio ( 0.6f );
คุณสามารถตั้งค่ามาสก์อัลฟ่าสำหรับหน้าพับด้านหลังได้เมื่อหน้าถูกม้วนงอในโหมดหน้าเดียว ค่าเริ่มต้นคือ 0.6f
ตัวอย่าง:
mPageFlip . setMaskAlphaOfFold ( 0.5f );
คุณสามารถตั้งค่าสีเริ่มต้น/สิ้นสุดและอัลฟาเริ่มต้น/สิ้นสุดสำหรับเงาขอบของหน้าพับ
ตัวอย่าง:
// 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 );
คุณสามารถตั้งค่าสีเริ่มต้น/สิ้นสุดและอัลฟาเริ่มต้น/สิ้นสุดสำหรับเงาพื้นฐานของหน้าพับ
ตัวอย่าง:
mPageFlip . setShadowColorOfFoldBase ( 0.05f , 0.2f , 0.5f , 1f );
เมื่อหน้าโค้งงอ ขนาดของหน้าพับจะเป็นไปตามการเคลื่อนไหวของนิ้วที่จะเปลี่ยน และความกว้างของเงาของขอบควรเปลี่ยนตามไปด้วย คุณสามารถกำหนดช่วงความกว้างที่เหมาะสมสำหรับความกว้างของเงาได้
ตัวอย่าง:
// 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 );
เช่นเดียวกับ ความกว้างของเงาขอบของหน้าพับ คุณสามารถตั้งค่าช่วงความกว้างที่เหมาะสมสำหรับเงาฐานของหน้าพับได้
ตัวอย่าง:
// see {@link #setShadowWidthOfFoldEdges} function
mPageFlip . setShadowWidthOfFoldBase ( 5 , 40 , 0.4f );
คุณสามารถกำหนดระยะเวลาในการพลิกแอนิเมชั่นได้เมื่อคุณเรียกใช้ฟังก์ชัน onFingerUp เพื่อจัดการกับเหตุการณ์การยกนิ้วขึ้น
ตัวอย่าง:
// the last parameter is duration with millisecond unit, here we set it with 2 seconds.
mPageFlip . onFingerUp ( x , y , 2000 );
โครงการนี้ได้รับอนุญาตภายใต้ Apache License เวอร์ชัน 2.0