কোটলিনে শর্তাবলী — পার্ট 2

এই কোডল্যাবে, আপনি আপনার বিদ্যমান ডাইস রোলার অ্যান্ড্রয়েড অ্যাপে ডাইস ছবি যোগ করবেন। প্রথমে ডাইস রোলার অ্যাপের ভিত্তি তৈরি করার জন্য আগের কোডল্যাবটি সম্পূর্ণ করতে ভুলবেন না।

একটি TextView ডাইস রোলের মান প্রদর্শন করার পরিবর্তে, আপনার অ্যাপটি রোল করা পার্শ্বগুলির সংখ্যার জন্য উপযুক্ত ডাইস চিত্র প্রদর্শন করবে৷ এটি আপনার অ্যাপের জন্য অনেক বেশি ভিজ্যুয়াল এবং উন্নত ব্যবহারকারীর অভিজ্ঞতা হবে।

ডাইস ছবিগুলি ডাউনলোড করার জন্য আপনাকে একটি লিঙ্ক দেওয়া হবে এবং আপনি সেগুলিকে আপনার অ্যাপে সংস্থান হিসাবে যুক্ত করবেন। কোন ডাইস ইমেজ ব্যবহার করতে হবে তার জন্য কোড লিখতে, আপনি Kotlin এ when স্টেটমেন্ট ব্যবহার করবেন।

পূর্বশর্ত

আপনি কি শিখবেন

  • অ্যাপটি চলাকালীন কীভাবে একটি ImageView আপডেট করবেন।
  • বিভিন্ন অবস্থার উপর ভিত্তি করে কীভাবে আপনার অ্যাপের আচরণ কাস্টমাইজ করবেন ( when স্টেটমেন্ট ব্যবহার করে)।

আপনি কি নির্মাণ করবেন

  • ডাইস রোলার অ্যান্ড্রয়েড অ্যাপ যাতে একটি ডাইস রোল করার এবং স্ক্রিনে ইমেজ আপডেট করার জন্য একটি Button রয়েছে।

তুমি কি চাও

  • অ্যান্ড্রয়েড স্টুডিও ইনস্টল করা একটি কম্পিউটার।
  • ডাইস ছবি ডাউনলোড করতে ইন্টারনেট সংযোগ.

এই কাজটিতে, আপনি আপনার লেআউটের ImageView TextView প্রতিস্থাপন করবেন যা ডাইস রোলের ফলাফলের একটি চিত্র প্রদর্শন করে।

ডাইস রোলার অ্যাপ খুলুন

  1. অ্যান্ড্রয়েড স্টুডিওতে একটি বোতাম দিয়ে একটি ডাইস রোলার অ্যান্ড্রয়েড অ্যাপ তৈরি করুন থেকে ডাইস রোলার অ্যাপটি খুলুন এবং চালান।
    অ্যাপটি দেখতে এইরকম হওয়া উচিত।

  1. activity_main.xml খুলুন ( অ্যাপ > res > লেআউট > activity_main.xml )।
    এটি লেআউট এডিটর খোলে।

টেক্সটভিউ মুছুন

  1. লেআউট এডিটরে , কম্পোনেন্ট ট্রিতে TextView নির্বাচন করুন।
  1. ডান-ক্লিক করুন এবং মুছুন নির্বাচন করুন বা Delete কী টিপুন।
  2. আপাতত Button সতর্কতা উপেক্ষা করুন। আপনি পরবর্তী ধাপে এটি ঠিক করবেন।

লেআউটে একটি ইমেজভিউ যোগ করুন

  1. প্যালেট থেকে একটি ImageView ভিউ টেনে আনুন ডিজাইন ভিউতে, এটিকে Button উপরে অবস্থান করুন।

  1. একটি সম্পদ বাছুন ডায়ালগে, নমুনা ডেটার অধীনে অবতার নির্বাচন করুন। আপনি পরবর্তী টাস্কে ডাইস ইমেজ যোগ না করা পর্যন্ত এই অস্থায়ী ইমেজটি ব্যবহার করবেন।

  1. ঠিক আছে টিপুন। আপনার অ্যাপের ডিজাইন ভিউ এইরকম হওয়া উচিত।

  1. কম্পোনেন্ট ট্রিতে , আপনি দুটি ত্রুটি লক্ষ্য করবেন। Button উল্লম্বভাবে সীমাবদ্ধ নয় এবং ImageView উল্লম্ব বা অনুভূমিকভাবে সীমাবদ্ধ নয়।

Button উল্লম্বভাবে সীমাবদ্ধ নয় কারণ আপনি TextView সরিয়ে দিয়েছেন যার নীচে এটি মূলত অবস্থান করা হয়েছিল। এখন আপনাকে ImageView এবং এর নীচে Button অবস্থান করতে হবে।

ইমেজভিউ এবং বোতামটি অবস্থান করুন

Button যেখানেই থাকুক না কেন, আপনাকে স্ক্রিনে ImageView উল্লম্বভাবে কেন্দ্রে রাখতে হবে।

  1. ImageView অনুভূমিক সীমাবদ্ধতা যুক্ত করুন। প্যারেন্ট ConstraintLayout লেআউটের বাম প্রান্তে ImageView -এর বাম দিকে সংযোগ করুন।
  2. প্যারেন্টের ডান প্রান্তে ImageView এর ডান দিকটি সংযুক্ত করুন।
    এটি প্যারেন্টের মধ্যে ImageView অনুভূমিকভাবে কেন্দ্রীভূত করবে।

  1. ইমেজভিউ-তে একটি উল্লম্ব সীমাবদ্ধতা যোগ করুন, ImageView -এর উপরের ImageView প্যারেন্টের শীর্ষে সংযুক্ত করুন।
    ImageView ConstraintLayout এর উপরের দিকে স্লাইড করবে।
  2. বোতামে একটি উল্লম্ব সীমাবদ্ধতা যোগ করুন, Button উপরের ImageView Button এর নীচে সংযুক্ত করুন।
    Button ImageView এর নীচে স্লাইড করবে।
  3. এখন আবার ImageView নির্বাচন করুন এবং একটি উল্লম্ব সীমাবদ্ধতা যোগ করুন যা ImageView -এর নীচের অংশে প্যারেন্টের নীচে সংযোগ করে।
    এটি ConstraintLayoutImageView উল্লম্বভাবে কেন্দ্র করে।

সীমাবদ্ধতা সম্পর্কে সমস্ত সতর্কতা এখন চলে যাওয়া উচিত।

এত কিছুর পরে, ডিজাইন ভিউটি দেখতে এইরকম হওয়া উচিত, কেন্দ্রে ImageView এবং এর ঠিক নীচে Button

আপনি কম্পোনেন্ট ট্রিতে ImageView একটি সতর্কতা লক্ষ্য করতে পারেন যা আপনার ImageView একটি বিষয়বস্তুর বিবরণ যোগ করতে বলে। আপাতত এই সতর্কতা নিয়ে চিন্তা করবেন না কারণ পরে কোডল্যাবে, আপনি কোন ডাইস ইমেজটি প্রদর্শন করছেন তার উপর ভিত্তি করে আপনি ImageView এর বিষয়বস্তুর বিবরণ সেট করবেন। কোটলিন কোডে এই পরিবর্তন করা হবে।

এই টাস্কে, আপনি কিছু ডাইস ইমেজ ডাউনলোড করবেন এবং আপনার অ্যাপে যোগ করবেন।

ডাইস ইমেজ ডাউনলোড করুন

  1. আপনার কম্পিউটারে ডাইস ছবিগুলির একটি জিপ ফাইল ডাউনলোড করতে এই URL টি খুলুন৷ ডাউনলোড সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন।
  2. আপনার কম্পিউটারে ফাইলটি সনাক্ত করুন (সম্ভবত ডাউনলোড ফোল্ডারে)।
  3. জিপ ফাইলটি আনপ্যাক করতে ডাবল-ক্লিক করুন। এটি একটি নতুন DiceImages ফোল্ডার তৈরি করে যাতে 6টি ডাইস ইমেজ ফাইল রয়েছে, যা 1 থেকে 6 পর্যন্ত ডাইস মান প্রদর্শন করে।

আপনার অ্যাপে ডাইস ছবি যোগ করুন

  1. অ্যান্ড্রয়েড স্টুডিওতে, মেনুতে ভিউ > টুল উইন্ডোজ > রিসোর্স ম্যানেজার -এ ক্লিক করুন অথবা প্রজেক্ট উইন্ডোর বাম দিকে রিসোর্স ম্যানেজার ট্যাবে ক্লিক করুন।
  2. নিচের রিসোর্স ম্যানেজারে ক্লিক করুন এবং ইম্পোর্ট ড্রয়েবল নির্বাচন করুন। এটি একটি ফাইল ব্রাউজার খোলে।

  1. 6 ডাইস ইমেজ ফাইল খুঁজুন এবং নির্বাচন করুন. আপনি প্রথম ফাইলটি নির্বাচন করতে পারেন, তারপরে Shift কী চেপে ধরে অন্যান্য ফাইলগুলি নির্বাচন করুন৷
  2. খুলুন ক্লিক করুন.
  1. আপনি এই 6 টি সংস্থান আমদানি করতে চান তা নিশ্চিত করতে পরবর্তী ক্লিক করুন এবং তারপর আমদানি করুন৷

  1. ফাইলগুলি সফলভাবে আমদানি করা হলে, 6টি ছবি আপনার অ্যাপের জন্য অঙ্কনযোগ্য তালিকায় উপস্থিত হওয়া উচিত।

চমৎকার কাজ! পরবর্তী টাস্কে, আপনি আপনার অ্যাপে এই ছবিগুলি ব্যবহার করবেন।

গুরুত্বপূর্ণ ! - আপনি আপনার কোটলিন কোডে এই ছবিগুলিকে তাদের রিসোর্স আইডি সহ উল্লেখ করতে সক্ষম হবেন:

  • R.drawable.dice_1
  • R.drawable.dice_2
  • R.drawable.dice_3
  • R.drawable.dice_4
  • R.drawable.dice_5
  • R.drawable.dice_6

নমুনা অবতার ছবি প্রতিস্থাপন করুন

  1. ডিজাইন এডিটরে , ImageView নির্বাচন করুন।
  2. ডিক্লেয়ারড অ্যাট্রিবিউটস বিভাগে অ্যাট্রিবিউটে, টুলটি খুঁজুন srcCompat অ্যাট্রিবিউট, যা অবতার ইমেজে সেট করা আছে।

মনে রাখবেন যে টুলস srcCompat অ্যাট্রিবিউট শুধুমাত্র Android স্টুডিওর ডিজাইন ভিউ এর ভিতরে প্রদত্ত ইমেজ ব্যবহার করে। আপনি অ্যাপটি তৈরি করার সময় ছবিটি শুধুমাত্র ডেভেলপারদের কাছে প্রদর্শিত হয়, কিন্তু আপনি যখন এমুলেটর বা ডিভাইসে অ্যাপটি চালান তখন তা দেখা যাবে না।

  1. অবতারের ক্ষুদ্র প্রিভিউতে ক্লিক করুন। এই ImageView জন্য ব্যবহার করার জন্য একটি নতুন সংস্থান বাছাই করার জন্য এটি একটি ডায়ালগ খোলে।

  1. dice_1 অঙ্কনযোগ্য নির্বাচন করুন এবং ঠিক আছে ক্লিক করুন।

ছিঃ! ImageView পুরো স্ক্রিনটি নেয়।

এর পরে, আপনি ImageView এর প্রস্থ এবং উচ্চতা সামঞ্জস্য করবেন, যাতে এটি Button লুকিয়ে না রাখে।

  1. Constraints Widget-এর অধীনে অ্যাট্রিবিউট উইন্ডোতে, লেআউট_প্রস্থ এবং লেআউট_উচ্চতা বৈশিষ্ট্যগুলি সনাক্ত করুন। সেগুলি বর্তমানে wrap_content এ সেট করা হয়েছে, যার অর্থ হল ImageView এর ভিতরে থাকা বিষয়বস্তুর (উৎস চিত্র) মত লম্বা এবং চওড়া হবে৷
  2. পরিবর্তে, ImageView এ 160dp এর একটি নির্দিষ্ট প্রস্থ এবং 200dp এর নির্দিষ্ট উচ্চতা সেট করুন। এন্টার টিপুন

    ImageView এখন অনেক ছোট।


আপনি দেখতে পেতে পারেন Button চিত্রের খুব কাছাকাছি।

  1. সীমাবদ্ধতা উইজেটে সেট করে 16dp বোতামে একটি শীর্ষ মার্জিন যোগ করুন।

একবার ডিজাইন ভিউ আপডেট হয়ে গেলে, অ্যাপটি আরও ভাল দেখায়!

বোতামটি ক্লিক করা হলে ডাইস চিত্রটি পরিবর্তন করুন

লেআউট ঠিক করা হয়েছে, কিন্তু ডাইস ইমেজ ব্যবহার করার জন্য MainActivity ক্লাস আপডেট করা দরকার।

MainActivity.kt ফাইলে অ্যাপটিতে বর্তমানে একটি ত্রুটি রয়েছে। আপনি যদি অ্যাপটি চালানোর চেষ্টা করেন, আপনি এই বিল্ড ত্রুটিটি দেখতে পাবেন:

এর কারণ হল আপনার কোড এখনও TextView করছে যা আপনি লেআউট থেকে মুছে ফেলেছেন।

  1. MainActivity.kt খুলুন ( অ্যাপ > java > com.example.diceroller > MainActivity.kt )

কোডটি R.id.textView কে বোঝায়, কিন্তু Android Studio এটি চিনতে পারে না।

  1. rollDice() পদ্ধতির মধ্যে, TextView কে নির্দেশ করে এমন যেকোনো কোড নির্বাচন করুন এবং এটি মুছুন।
// Update the TextView with the dice roll
val resultTextView: TextView = findViewByID(R.id.textView)
resultTextView.text = dice.roll().toString()
  1. এখনও rollRice() এর মধ্যে, ImageView টাইপের diceImage নামে একটি নতুন ভেরিয়েবল তৈরি করুন। লেআউট থেকে ImageView এর সমান সেট করুন। findViewById() পদ্ধতি ব্যবহার করুন এবং ইনপুট আর্গুমেন্ট হিসাবে ImageView , R.id.imageView এর জন্য রিসোর্স আইডিতে পাস করুন।
val diceImage: ImageView = findViewById(R.id.imageView)

আপনি যদি ভাবছেন কিভাবে ImageView এর সুনির্দিষ্ট রিসোর্স আইডি বের করবেন, তাহলে অ্যাট্রিবিউটস উইন্ডোর শীর্ষে আইডি চেক করুন।

আপনি যখন কোটলিন কোডে এই রিসোর্স আইডিটি উল্লেখ করেন, তখন নিশ্চিত করুন যে আপনি এটি ঠিক একই টাইপ করেছেন (ছোট হাতের i, বড় হাতের V, কোনো স্পেস নেই)। অন্যথায় অ্যান্ড্রয়েড স্টুডিও একটি ত্রুটি দেখাবে।

  1. বোতামটি ক্লিক করা হলে আপনি সঠিকভাবে ImageView আপডেট করতে পারেন তা পরীক্ষা করতে কোডের এই লাইনটি যোগ করুন। ডাইস রোল সবসময় "2" হবে না কিন্তু পরীক্ষার উদ্দেশ্যে শুধুমাত্র dice_2 ইমেজটি ব্যবহার করুন।
diceImage.setImageResource(R.drawable.dice_2)

এই কোডটি ImageViewsetImageResource() পদ্ধতিকে কল করে, dice_2 ছবির জন্য রিসোর্স আইডি পাস করে। এটি dice_2 ইমেজ প্রদর্শন করতে পর্দায় ImageView আপডেট করবে।

rollDice() পদ্ধতিটি এখন এইরকম হওয়া উচিত:

private fun rollDice() {
    val dice = Dice(6)
    val diceRoll = dice.roll()
    val diceImage: ImageView = findViewById(R.id.imageView)
    diceImage.setImageResource(R.drawable.dice_2)
}
  1. এটি ত্রুটি ছাড়াই চলে তা যাচাই করতে আপনার অ্যাপটি চালান।

রোল বোতাম ব্যতীত একটি ফাঁকা স্ক্রীন দিয়ে অ্যাপটি শুরু হওয়া উচিত।

একবার আপনি বোতামটি আলতো চাপলে, মান 2 প্রদর্শন করে একটি ডাইস চিত্র প্রদর্শিত হবে। হ্যাঁ!!

আপনি বোতাম ট্যাপ উপর ভিত্তি করে ইমেজ পরিবর্তন করতে সক্ষম ছিল! আপনি আরো কাছাকাছি হচ্ছে!

স্পষ্টতই ডাইসের ফলাফল সবসময় 2 হবে না। কন্ট্রোল ফ্লো লজিক ব্যবহার করুন যা আপনি অ্যাড কন্ডিশনাল বিহেভিয়ার ফর ডিফারেন্ট ডাইস রোলস কোডল্যাবে শিখেছেন যাতে র্যান্ডম ডাইস রোলের উপর নির্ভর করে উপযুক্ত ডাইস ইমেজ স্ক্রিনে প্রদর্শিত হবে।

আপনি কোড টাইপ করা শুরু করার আগে, কী ঘটতে হবে তা বর্ণনা করে এমন কিছু সিউডোকোড লিখে অ্যাপটি কীভাবে আচরণ করা উচিত সে সম্পর্কে ধারণাগতভাবে চিন্তা করুন। উদাহরণ স্বরূপ:

যদি ব্যবহারকারী একটি 1 রোল করে, তাহলে dice_1 চিত্রটি প্রদর্শন করুন।

যদি ব্যবহারকারী একটি 2 রোল করে, তাহলে dice_2 চিত্রটি প্রদর্শন করুন।

ইত্যাদি...

উপরের সিউডোকোডটি ডাইস রোলের মানের উপর ভিত্তি করে কোটলিনে if / else স্টেটমেন্ট দিয়ে লেখা যেতে পারে।

if (diceRoll == 1) {
   diceImage.setImageResource(R.drawable.dice_1)
} else if (diceRoll == 2) {
   diceImage.setImageResource(R.drawable.dice_2)
}
 ...

প্রতিটি ক্ষেত্রে if / else লেখা বেশ পুনরাবৃত্ত হয়, যদিও। একই যুক্তিকে আরও সহজভাবে প্রকাশ করা যেতে পারে when বিবৃতি দিয়ে। এটি আরও সংক্ষিপ্ত (কম কোড)! আপনার অ্যাপে এই পদ্ধতি ব্যবহার করুন।

when (diceRoll) {
   1 -> diceImage.setImageResource(R.drawable.dice_1)
   2 -> diceImage.setImageResource(R.drawable.dice_2)
   ...

rollDice() পদ্ধতি আপডেট করুন

  1. rollDice() পদ্ধতিতে, কোডের লাইনটি মুছে ফেলুন যা প্রতিবার dice_2 ছবিতে ইমেজ রিসোর্স আইডি সেট করে।
diceImage.setImageResource(R.drawable.dice_2)
  1. এটিকে একটি when স্টেটমেন্ট দিয়ে প্রতিস্থাপন করুন যা diceRoll মানের উপর ভিত্তি করে ImageView আপডেট করে।
   when (diceRoll) {
       1 -> diceImage.setImageResource(R.drawable.dice_1)
       2 -> diceImage.setImageResource(R.drawable.dice_2)
       3 -> diceImage.setImageResource(R.drawable.dice_3)
       4 -> diceImage.setImageResource(R.drawable.dice_4)
       5 -> diceImage.setImageResource(R.drawable.dice_5)
       6 -> diceImage.setImageResource(R.drawable.dice_6)
   }

আপনি পরিবর্তনগুলি সম্পন্ন করার পরে rollDice() পদ্ধতিটি এইরকম হওয়া উচিত।

private fun rollDice() {
   val dice = Dice(6)
   val diceRoll = dice.roll()

   val diceImage: ImageView = findViewById(R.id.imageView)

   when (diceRoll) {
       1 -> diceImage.setImageResource(R.drawable.dice_1)
       2 -> diceImage.setImageResource(R.drawable.dice_2)
       3 -> diceImage.setImageResource(R.drawable.dice_3)
       4 -> diceImage.setImageResource(R.drawable.dice_4)
       5 -> diceImage.setImageResource(R.drawable.dice_5)
       6 -> diceImage.setImageResource(R.drawable.dice_6)
   }
}
  1. অ্যাপটি চালান। রোল বোতামে ক্লিক করলে ডাইস ইমেজ 2 থেকে অন্য মানগুলিতে পরিবর্তন হয়। এটি কাজ করে!

আপনার কোড অপ্টিমাইজ করুন

আপনি যদি আরও সংক্ষিপ্ত কোড লিখতে চান তবে আপনি নিম্নলিখিত কোড পরিবর্তন করতে পারেন। আপনার অ্যাপের ব্যবহারকারীর কাছে এটির কোনো দৃশ্যমান প্রভাব নেই, তবে এটি আপনার কোডকে ছোট করে এবং কম পুনরাবৃত্তিমূলক করে তুলবে।

আপনি হয়তো লক্ষ্য করেছেন যে diceImage.setImageResource() এ কলটি আপনার কখন বিবৃতিতে 6 বার উপস্থিত হয়।

when (diceRoll) {
    1 -> diceImage.setImageResource(R.drawable.dice_1)
    2 -> diceImage.setImageResource(R.drawable.dice_2)
    3 -> diceImage.setImageResource(R.drawable.dice_3)
    4 -> diceImage.setImageResource(R.drawable.dice_4)
    5 -> diceImage.setImageResource(R.drawable.dice_5)
    6 -> diceImage.setImageResource(R.drawable.dice_6)
}

প্রতিটি ক্ষেত্রের মধ্যে শুধুমাত্র যে জিনিসটি পরিবর্তিত হয় তা হল রিসোর্স আইডি যা ব্যবহার করা হচ্ছে। তার মানে আপনি ব্যবহার করার জন্য রিসোর্স আইডি সংরক্ষণ করার জন্য একটি ভেরিয়েবল তৈরি করতে পারেন। তারপর আপনি আপনার কোডে শুধুমাত্র একবার diceImage.setImageResource() কল করতে পারেন এবং সঠিক রিসোর্স আইডিতে পাস করতে পারেন।

  1. উপরের কোডটি নিম্নলিখিত দিয়ে প্রতিস্থাপন করুন।
val drawableResource = when (diceRoll) {
   1 -> R.drawable.dice_1
   2 -> R.drawable.dice_2
   3 -> R.drawable.dice_3
   4 -> R.drawable.dice_4
   5 -> R.drawable.dice_5
   6 -> R.drawable.dice_6
}

diceImage.setImageResource(drawableResource)

এখানে একটি নতুন ধারণা হল যে একটি when অভিব্যক্তি আসলে একটি মান ফেরত দিতে পারে। এই নতুন কোড স্নিপেটের সাথে, when এক্সপ্রেশন সঠিক রিসোর্স আইডি প্রদান করে, যা drawableResource ভেরিয়েবলে সংরক্ষণ করা হবে। তারপর আপনি প্রদর্শিত চিত্র সংস্থান আপডেট করতে সেই ভেরিয়েবলটি ব্যবহার করতে পারেন।

  1. লক্ষ্য করুন when এখন লাল রঙে আন্ডারলাইন করা হয়েছে। আপনি যদি এটির উপরে আপনার পয়েন্টার হোভার করেন, আপনি একটি ত্রুটি বার্তা দেখতে পাবেন: 'যখন' অভিব্যক্তি সম্পূর্ণ হতে হবে, প্রয়োজনীয় 'অন্য' শাখা যোগ করুন

ত্রুটিটি হল কারণ when অভিব্যক্তিটির মান drawableResource এ বরাদ্দ করা হয়, তাই when সম্পূর্ণ হওয়া আবশ্যক—এটি অবশ্যই সম্ভাব্য সমস্ত ক্ষেত্রে পরিচালনা করতে হবে যাতে একটি মান সর্বদা ফিরে আসে, এমনকি যদি আপনি 12-পার্শ্বযুক্ত পাশায় পরিবর্তন করেন।. Android স্টুডিও একটি else শাখা যোগ করার পরামর্শ দেয়। আপনি 6 এর জন্য কেস পরিবর্তন করে এটি ঠিক else পারেন। 1 থেকে 5 পর্যন্ত কেস একই, কিন্তু 6 সহ বাকি সব অন্যদের দ্বারা else হয়।

val drawableResource = when (diceRoll) {
   1 -> R.drawable.dice_1
   2 -> R.drawable.dice_2
   3 -> R.drawable.dice_3
   4 -> R.drawable.dice_4
   5 -> R.drawable.dice_5
   else -> R.drawable.dice_6
}

diceImage.setImageResource(drawableResource)
  1. এটি এখনও সঠিকভাবে কাজ করে তা নিশ্চিত করতে অ্যাপটি চালান। আপনি 1 থেকে 6 পর্যন্ত ডাইস ইমেজগুলির সাথে সমস্ত সংখ্যা দেখতে পাচ্ছেন তা নিশ্চিত করার জন্য এটি যথেষ্ট পরীক্ষা করতে ভুলবেন না।

ImageView এ একটি উপযুক্ত বিষয়বস্তুর বিবরণ সেট করুন

এখন আপনি একটি চিত্রের সাথে রোলড নম্বরটি প্রতিস্থাপন করেছেন, স্ক্রিন রিডাররা আর বলতে পারবেন না কোন নম্বরটি রোল করা হয়েছিল৷ এটি ঠিক করতে, আপনি ইমেজ রিসোর্স আপডেট করার পর, ImageView এর বিষয়বস্তুর বিবরণ আপডেট করুন। বিষয়বস্তুর বিবরণ ImageView যা দেখানো হয়েছে তার একটি পাঠ্য বিবরণ হওয়া উচিত যাতে স্ক্রিন রিডাররা এটি বর্ণনা করতে পারে।

diceImage.contentDescription = diceRoll.toString()

স্ক্রীন রিডাররা এই বিষয়বস্তুর বিবরণ জোরে জোরে পড়তে পারে, তাই যদি "6" ছবির ডাইস রোল স্ক্রিনে প্রদর্শিত হয়, তাহলে বিষয়বস্তুর বিবরণ "6" হিসেবে উচ্চস্বরে পড়া হবে।

একটি আরো দরকারী লঞ্চ অভিজ্ঞতা তৈরি করুন

ব্যবহারকারী যখন প্রথমবার অ্যাপটি খোলে, তখন অ্যাপটি ফাঁকা থাকে ( রোল বোতাম ব্যতীত), যা অদ্ভুত দেখায়। ব্যবহারকারীরা হয়তো জানেন না কী আশা করবেন, তাই আপনি যখন অ্যাপটি শুরু করবেন এবং Activity তৈরি করবেন তখন একটি এলোমেলো ডাইস রোল প্রদর্শন করতে UI পরিবর্তন করুন। তারপরে ব্যবহারকারীরা বুঝতে পারবেন যে রোল বোতামটি আলতো চাপলে একটি ডাইস রোল তৈরি হবে।

override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.activity_main)

   val rollButton: Button = findViewById(R.id.button)
   rollButton.setOnClickListener { rollDice() }

   // Do a dice roll when the app starts
   rollDice()
}

আপনার কোড মন্তব্য করুন

আপনার লেখা কোডে কী ঘটছে তা বর্ণনা করতে আপনার কোডে কিছু মন্তব্য যোগ করুন।

আপনি এই সমস্ত পরিবর্তন করার পরে, এটি আপনার rollDice() পদ্ধতির মত দেখতে হতে পারে।

/**
* Roll the dice and update the screen with the result.
*/
private fun rollDice() {
   // Create new Dice object with 6 sides and roll the dice
   val dice = Dice(6)
   val diceRoll = dice.roll()

   // Find the ImageView in the layout
   val diceImage: ImageView = findViewById(R.id.imageView)

   // Determine which drawable resource ID to use based on the dice roll
   val drawableResource = when (diceRoll) {
       1 -> R.drawable.dice_1
       2 -> R.drawable.dice_2
       3 -> R.drawable.dice_3
       4 -> R.drawable.dice_4
       5 -> R.drawable.dice_5
       else -> R.drawable.dice_6
   }

   // Update the ImageView with the correct drawable resource ID
   diceImage.setImageResource(drawableResource)

   // Update the content description
   diceImage.contentDescription = diceRoll.toString()
}

সম্পূর্ণ MainActivity.kt ফাইলের জন্য, নীচে লিঙ্ক করা GitHub-এর সমাধান কোডটি দেখুন।

ডাইস রোলার অ্যাপটি সম্পূর্ণ করার জন্য ভাল! এখন আপনি আপনার বন্ধুদের সাথে পরবর্তী গেমের রাতে এই অ্যাপটি আনতে পারেন!

এই কোডল্যাবের সমাধান কোডটি নীচে দেখানো প্রকল্প এবং মডিউলে রয়েছে।

GitHub থেকে এই কোডল্যাবের কোডটি পেতে এবং এটি অ্যান্ড্রয়েড স্টুডিওতে খুলতে, নিম্নলিখিতগুলি করুন৷

  1. অ্যান্ড্রয়েড স্টুডিও শুরু করুন।
  2. অ্যান্ড্রয়েড স্টুডিওতে স্বাগতম উইন্ডোতে, সংস্করণ নিয়ন্ত্রণ থেকে প্রজেক্ট চেক আউট ক্লিক করুন।
  3. গিট নির্বাচন করুন।

  1. ক্লোন রিপোজিটরি ডায়ালগে, প্রদত্ত কোড URL টি URL বক্সে পেস্ট করুন।
  2. পরীক্ষা বোতামে ক্লিক করুন, অপেক্ষা করুন, এবং নিশ্চিত করুন যে একটি সবুজ পপআপ বুদবুদ আছে যা বলছে সংযোগ সফল
  3. ঐচ্ছিকভাবে, নির্দেশিত ডিফল্টের চেয়ে ভিন্ন কিছুতে নির্দেশিকা পরিবর্তন করুন।

  1. ক্লোন ক্লিক করুন। অ্যান্ড্রয়েড স্টুডিও আপনার কোড আনা শুরু করে।
  2. সংস্করণ নিয়ন্ত্রণ পপআপ থেকে চেকআউটে , হ্যাঁ ক্লিক করুন।

  1. অ্যান্ড্রয়েড স্টুডিও খোলার জন্য অপেক্ষা করুন।
  2. আপনার কোডল্যাব স্টার্টার বা সমাধান কোডের জন্য সঠিক মডিউল নির্বাচন করুন।

  1. রান বোতামে ক্লিক করুন আপনার কোড তৈরি এবং চালানোর জন্য।
  • একটি ImageView প্রদর্শিত চিত্রটি পরিবর্তন করতে setImageResource() ব্যবহার করুন
  • কন্ট্রোল ফ্লো স্টেটমেন্ট ব্যবহার করুন যেমন if / else এক্সপ্রেশন বা when এক্সপ্রেশন আপনার অ্যাপে বিভিন্ন কেস পরিচালনা করতে, উদাহরণস্বরূপ, বিভিন্ন পরিস্থিতিতে বিভিন্ন চিত্র দেখানো।

নিম্নলিখিতগুলি করুন:

  1. অ্যাপটিতে আরেকটি ডাইস যোগ করুন, যাতে একটি রোল বোতাম 2টি ডাইস ফলাফল দেয়। আপনার লেআউটে কতগুলি ImageViews লাগবে? এটি কিভাবে MainActivity.kt প্রভাবিত করবে?

নিজের কাজের খোজ নাও:

আপনার সমাপ্ত অ্যাপটি ত্রুটি ছাড়াই চালানো উচিত এবং দুটি পাশা দেখাতে হবে।