Jetpack Compose Academy · บทเรียน

การแปลง: เลื่อน ซูม และหมุน

รองรับท่าทางบีบและการสัมผัสหลายจุด

บทเรียน 3 จาก 413 ขั้นตอน

การแปลง: เลื่อน ซูม และหมุน เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. pointerInput และ detectTapGestures
  2. ลาก ปัด และสะบัด
  3. การแปลง: เลื่อน ซูม และหมุน
  4. การเชื่อมต่อการเลื่อนซ้อนกัน
← กลับไปที่ Jetpack Compose Academy