রোটারি ইনপুট বলতে আপনার ঘড়ির টুকরো থেকে ইনপুট বোঝায় যা ঘোরানো বা ঘোরানো হয়। গড়ে, ব্যবহারকারীরা তাদের ঘড়ির সাথে ইন্টারঅ্যাক্ট করতে মাত্র কয়েক সেকেন্ড ব্যয় করে। আপনি রোটারি ইনপুট ব্যবহার করে আপনার ব্যবহারকারীর অভিজ্ঞতা বাড়াতে পারেন যাতে আপনার ব্যবহারকারীকে দ্রুত বিভিন্ন কাজ সম্পন্ন করতে পারে।
বেশিরভাগ ঘড়িতে রোটারি ইনপুটের তিনটি প্রধান উৎসের মধ্যে রয়েছে রোটেটিং সাইড বোতাম (RSB), এবং হয় একটি ফিজিক্যাল বেজেল বা একটি টাচ বেজেল, যা স্ক্রিনের চারপাশে একটি বৃত্তাকার স্পর্শ অঞ্চল। যদিও প্রত্যাশিত আচরণ ইনপুট ধরনের উপর ভিত্তি করে পরিবর্তিত হতে পারে, সমস্ত প্রয়োজনীয় মিথস্ক্রিয়া জন্য ঘূর্ণমান ইনপুট সমর্থন নিশ্চিত করুন.
স্ক্রল করুন
বেশিরভাগ ব্যবহারকারী অ্যাপগুলি স্ক্রোল অঙ্গভঙ্গি সমর্থন করবে বলে আশা করে৷ বিষয়বস্তু স্ক্রিনে স্ক্রোল করার সাথে সাথে, ঘূর্ণমান মিথস্ক্রিয়াগুলির প্রতিক্রিয়া হিসাবে ব্যবহারকারীদের ভিজ্যুয়াল প্রতিক্রিয়া দিন। ভিজ্যুয়াল ফিডব্যাকে উল্লম্ব স্ক্রোল বা পৃষ্ঠা সূচকগুলির জন্য স্ক্রলিং সূচক অন্তর্ভুক্ত থাকতে পারে।
ScalingLazyColumn
, TransformingLazyColumn
এবং Picker
ডিফল্টরূপে স্ক্রোল অঙ্গভঙ্গি সমর্থন করে, যতক্ষণ না আপনাকে AppScaffold
এবং ScreenScaffold
মধ্যে সেই উপাদানগুলি স্থাপন করতে হবে এবং ScreenScaffold
এবং একটি TransformingLazyColumn
মতো উপাদানগুলির মধ্যে তালিকার অবস্থা পাস করতে হবে।
AppScaffold
এবং ScreenScaffold
Wear OS অ্যাপগুলির জন্য মৌলিক লেআউট কাঠামো প্রদান করে এবং ইতিমধ্যেই একটি ডিফল্ট বাস্তবায়ন সহ একটি স্ক্রোল নির্দেশকের জন্য একটি স্লট রয়েছে৷ স্ক্রলিং অগ্রগতি কাস্টমাইজ করতে, তালিকার অবস্থা অবজেক্টের উপর ভিত্তি করে একটি স্ক্রোল নির্দেশক তৈরি করুন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:
val listState = rememberTransformingLazyColumnState() ScreenScaffold( scrollState = listState, scrollIndicator = { ScrollIndicator(state = listState) } ) { // ... }
আপনি ScalingLazyColumnDefaults.snapFlingBehavior
ব্যবহার করে ScalingLazyColumn
জন্য একটি স্ন্যাপ আচরণ কনফিগার করতে পারেন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:
val listState = rememberScalingLazyListState() ScreenScaffold( scrollState = listState, scrollIndicator = { ScrollIndicator(state = listState) } ) { val state = rememberScalingLazyListState() ScalingLazyColumn( modifier = Modifier.fillMaxWidth(), state = state, flingBehavior = ScalingLazyColumnDefaults.snapFlingBehavior(state = state) ) { // Content goes here // ... } }
কাস্টম অ্যাকশন
আপনি কাস্টম অ্যাকশনও তৈরি করতে পারেন যা আপনার অ্যাপে রোটারি ইনপুটে সাড়া দেয়। উদাহরণস্বরূপ, জুম ইন এবং আউট করতে বা মিডিয়া অ্যাপে ভলিউম নিয়ন্ত্রণ করতে রোটারি ইনপুট ব্যবহার করুন।
যদি আপনার উপাদানটি নেটিভভাবে স্ক্রলিং ইভেন্টগুলিকে সমর্থন না করে যেমন ভলিউম নিয়ন্ত্রণ, আপনি নিজেই স্ক্রোল ইভেন্টগুলি পরিচালনা করতে পারেন।
// VolumeScreen.kt
val focusRequester: FocusRequester = remember { FocusRequester() }
Column(
modifier = Modifier
.fillMaxSize()
.onRotaryScrollEvent {
// handle rotary scroll events
true
}
.focusRequester(focusRequester)
.focusable(),
) { ... }
ভিউ মডেলে পরিচালিত একটি কাস্টম অবস্থা এবং একটি কাস্টম কলব্যাক তৈরি করুন যা রোটারি স্ক্রোল ইভেন্টগুলি প্রক্রিয়া করতে ব্যবহৃত হয়।
// VolumeViewModel.kt
object VolumeRange(
public val max: Int = 10
public val min: Int = 0
)
val volumeState: MutableStateFlow<Int> = ...
fun onVolumeChangeByScroll(pixels: Float) {
volumeState.value = when {
pixels > 0 -> min (volumeState.value + 1, VolumeRange.max)
pixels < 0 -> max (volumeState.value - 1, VolumeRange.min)
}
}
সরলতার খাতিরে, পূর্ববর্তী উদাহরণে পিক্সেল মান ব্যবহার করা হয়েছে যেটি বাস্তবে ব্যবহার করলে অত্যধিক সংবেদনশীল হওয়ার সম্ভাবনা থাকে।
আপনি ইভেন্টগুলি পাওয়ার পরে কলব্যাক ব্যবহার করুন, যেমনটি নিম্নলিখিত স্নিপেটে দেখানো হয়েছে।
val focusRequester: FocusRequester = remember { FocusRequester() }
val volumeState by volumeViewModel.volumeState.collectAsState()
Column(
modifier = Modifier
.fillMaxSize()
.onRotaryScrollEvent {
volumeViewModel
.onVolumeChangeByScroll(it.verticalScrollPixels)
true
}
.focusRequester(focusRequester)
.focusable(),
) { ... }
আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলে লিঙ্ক টেক্সট প্রদর্শিত হয়
- ফোকাস আচরণ পরিবর্তন করুন
- Jetpack রচনার সাথে কীবোর্ড, মাউস, ট্র্যাকপ্যাড এবং স্টাইলাস সমর্থন যোগ করুন
- Wear OS কোডল্যাবের জন্য রচনা করুন