การแปลง: เลื่อน ซูม และหมุน
รองรับท่าทางบีบและการสัมผัสหลายจุด
การแปลง: เลื่อน ซูม และหมุน เป็นบทเรียน Jetpack Compose Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Jetpack Compose Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Jetpack Compose Academy มีบทเรียนทั้งหมด 4 บทเรียน
บีบนิ้ว ซูม หมุน
ท่าทางบางอย่างใช้สองนิ้วพร้อมกัน Compose รวมการเลื่อน การซูม และการหมุนไว้ในตัวช่วยเดียวที่เรียกว่า detectTransformGestures 🤏
ตัวตรวจจับเดียว สามค่า
ภายใน pointerInput detectTransformGestures จะส่งการเลื่อนเป็น Offset การซูมเป็นค่า Float scale และการหมุนเป็นองศามาให้พร้อมกัน
detectTransformGestures { _, pan, zoom, rotation -> }เก็บสถานะทั้งสาม
เก็บค่า scale ออฟเซ็ต และการหมุนไว้ในสถานะที่จดจำได้ อัปเดตแต่ละค่าจากท่าทางเพื่อให้องค์ประกอบเปลี่ยนรูปแบบแบบเรียลไทม์
var scale by remember { mutableStateOf(1f) }คูณค่าซูม
ค่า การซูม เป็นค่าที่สัมพันธ์กับค่าเดิม จึงควรนำไปคูณกับสเกลแทนการแทนที่ค่าเดิม การบีบนิ้วออกจะขยาย ส่วนการบีบนิ้วเข้าจะย่อ
scale *= zoomเพิ่มการหมุน
ค่าความเปลี่ยนแปลงของ การหมุน มีหน่วยเป็นองศาต่อหนึ่งขั้นของท่าทาง ให้สะสมค่านี้เพื่อให้การบิดสองนิ้วหมุนเนื้อหาอย่างลื่นไหล
angle += rotationการเลื่อนจะย้ายไปรอบ ๆ
ค่า Offset ของ การเลื่อน จะรายงานว่าจุดกึ่งกลางของท่าทางเคลื่อนที่ไปไกลเพียงใด ให้บวกค่านี้เข้ากับสถานะออฟเซ็ตเพื่อเลื่อนเนื้อหาใต้ปลายนิ้ว
offset += panใช้กับ graphicsLayer
วิธีแสดงการเปลี่ยนรูปแบบที่เป็นระเบียบคือใช้ตัวปรับแต่ง graphicsLayer ตั้งค่า scaleX, scaleY, rotationZ และการเลื่อนทั้งหมดไว้ในที่เดียว
Modifier.graphicsLayer(scaleX = scale, scaleY = scale, rotationZ = angle)เลื่อนภายในเลเยอร์
ภายใน graphicsLayer ให้ตั้งค่า translationX และ translationY จากออฟเซ็ตของคุณ วิธีนี้จะเปลี่ยนรูปแบบโดยไม่บังคับให้เกิดขั้นตอนจัดวางที่มีต้นทุนสูง
translationX = offset.x; translationY = offset.yจำกัดค่าสเกล
ผู้ใช้อาจบีบนิ้วอย่างรุนแรง ดังนั้นให้ จำกัด สเกลให้อยู่ในขอบเขตที่เหมาะสมด้วย coerceIn เพื่อป้องกันไม่ให้เนื้อหาหายไปหรือขยายจนเต็มโลก
scale = scale.coerceIn(0.5f, 5f)ลำดับการทำงาน
graphicsLayer จะใช้ scale ก่อน จากนั้นจึงหมุน แล้วจึงเลื่อน การรู้ลำดับนี้ช่วยให้คุณคาดเดาตำแหน่งที่เนื้อหาซึ่งผ่านการเปลี่ยนรูปแบบจะไปปรากฏได้
จัดศูนย์รอบจุดหมุน
โดยค่าเริ่มต้น การเปลี่ยนรูปแบบจะใช้จุดศูนย์กลางขององค์ประกอบเป็นจุดหมุน ปรับ transformOrigin ใน graphicsLayer เพื่อซูมและหมุนรอบจุดอื่น
Modifier.graphicsLayer(transformOrigin = TransformOrigin(0f, 0f))ตรวจสอบความเข้าใจ
ควรนำค่าซูมที่ได้รับมาใช้กับสถานะสเกลอย่างไร
ทบทวน: มหัศจรรย์ของการสัมผัสหลายจุด
คุณใช้ detectTransformGestures สำหรับการเลื่อน การซูม และการหมุน แล้วนำไปใช้ผ่าน graphicsLayer พร้อมจำกัดค่า ตอนนี้คุณพร้อมใช้การบีบนิ้วเพื่อซูมแล้ว 🎉
เรียนรู้ Kotlin ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “การแปลง: เลื่อน ซูม และหมุน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแปลง: เลื่อน ซูม และหมุน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Jetpack Compose Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Jetpack Compose Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแปลง: เลื่อน ซูม และหมุน”
รองรับท่าทางบีบและการสัมผัสหลายจุด คุณปฏิบัติ Jetpack Compose Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Jetpack Compose Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Jetpack Compose Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การแปลง: เลื่อน ซูม และหมุน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Jetpack Compose Academy นี้ได้ไหม
ได้ บทเรียน Jetpack Compose Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- pointerInput และ detectTapGestures
- ลาก ปัด และสะบัด
- การแปลง: เลื่อน ซูม และหมุน
- การเชื่อมต่อการเลื่อนซ้อนกัน