Jetpack Compose Glimmer-এ পরোক্ষ পয়েন্টার ইনপুট ম্যানেজ করা

প্রযোজ্য XR ডিভাইস
এইসব XR ডিভাইসের জন্য অভিজ্ঞতা তৈরি করতে এই নির্দেশিকা আপনাকে সাহায্য করে।
অডিও ও
ডিসপ্লে গ্লাস

onIndirectPointerGesture মডিফায়ার কম্পোনেন্টকে হাই-লেভেল ইনডাইরেক্ট পয়েন্টার ইভেন্ট গ্রহণ করতে ও তার উত্তর দিতে দেয়, যেমন ডিভাইসের টাচপ্যাড থেকে আসা ইভেন্ট। টাচপ্যাড বা একই ধরনের সোর্স থেকে আসা জেসচার ক্যাপচার ও প্রসেস করতে এই মডিফায়ার ব্যবহার করুন।

API সারফেস

হ্যান্ডেল করা কন্ট্রোল করতে আপনার অ্যাপ চারটি কলব্যাক ব্যবহার করতে পারে:

  • onClick: উল্লেখযোগ্য অনুভূমিক মুভমেন্ট ছাড়াই সফল ট্যাপ বা ক্লিক করা হলে ট্রিগার হয়।
  • onSwipeForward: সামনের দিকে অনুভূমিক সোয়াইপ দূরত্ব ও গতি সংক্রান্ত থ্রেশহোল্ড অতিক্রম করলে ট্রিগার হয়।
  • onSwipeBackward: অনুভূমিক সোয়াইপ করার সময় দূরত্ব এবং ভেলোসিটি থ্রেশহোল্ড অতিক্রম করলে এটি ট্রিগার হয়।
  • Enabled: false হিসেবে সেট করা থাকলে, মডিফায়ার উপেক্ষা করা হয় এবং কোনও কলব্যাক ইনভোক করা হয় না।

সোয়াইপ ও স্ক্রল করার সময় সিস্টেমের আচরণ

সিস্টেম, ক্লিক ও সোয়াইপের মধ্যে পার্থক্য করতে টাচ স্লোপ থ্রেশহোল্ড ব্যবহার করে।

  • ডাউন স্টেটে থাকাকালীন পয়েন্টারটি উল্লেখযোগ্যভাবে সরলে, onClick বাতিল হয়ে যায়।
  • নড়াচড়া করার সময় পয়েন্টার যদি উল্লেখযোগ্যভাবে ব্যাকট্র্যাক করে, তাহলে সোয়াইপ জেসচার অকার্যকর হয়ে যায়।

উদাহরণ: কোনও কম্পোনেন্টে সোয়াইপ ও ক্লিক করার জন্য হ্যান্ডলিং সেট-আপ করা

নিচের কোডটি ফোকাস করা যায় এমন Box-এ সোয়াইপ ও ক্লিক করার হ্যান্ডেলিং সেট-আপ করে:

@Composable
fun OnIndirectPointerGestureSample() {
    var lastGesture by remember { mutableStateOf("None") }

    Box(
        modifier =
            Modifier.fillMaxSize()
                .onIndirectPointerGesture(
                    enabled = true,
                    onSwipeForward = { lastGesture = "Forward" },
                    onSwipeBackward = { lastGesture = "Backward" },
                    onClick = { lastGesture = "Click" },
                )
                .focusTarget(),
        contentAlignment = Alignment.Center,
    ) {
        Text("Last Gesture: $lastGesture")
    }
}

কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট

  • onIndirectPointerGesture-এ ফোকাস করতে হয়, তাই Box-কে ফোকাস করার উপযুক্ত করে তুলতে focusTarget-ও প্রয়োগ করা হয়। আপনি focusTarget অথবা ফোকাস চালু করার অন্য কোনও মডিফায়ার যেমন surface ব্যবহার করতে পারেন। ফোকাস না থাকলে, মডিফায়ার পরোক্ষ পয়েন্টার ইভেন্টের উপর কাজ করতে পারে না।
  • এই উদাহরণে onSwipeForward ও onClick, দুটি কলব্যাকই প্রয়োগ করা হয়েছে, তাই শনাক্ত করা সোয়াইপ ও ক্লিক জেসচার ইন্টারসেপ্ট ও কনজিউম করা হয়, এবং পেরেন্ট কন্টেনারে পৌঁছায় না। তবে, আপনি কোনও নির্দিষ্ট কলব্যাক নাল রেখেও কোনও জেসচারকে পেরেন্ট কন্টেনারের onIndirectPointerGesture মডিফায়ারের মধ্যে দিয়ে পাস করতে পারেন।