আপনি ভিউতে টুইন করা অ্যানিমেশন সঞ্চালনের জন্য ভিউ অ্যানিমেশন সিস্টেম ব্যবহার করতে পারেন। টুইন অ্যানিমেশন সূচনা পয়েন্ট, শেষ বিন্দু, আকার, ঘূর্ণন এবং অ্যানিমেশনের অন্যান্য সাধারণ দিকগুলির মতো তথ্য সহ অ্যানিমেশন গণনা করে।
একটি টুইন অ্যানিমেশন একটি ভিউ অবজেক্টের বিষয়বস্তুতে কয়েকটি সাধারণ রূপান্তর (অবস্থান, আকার, ঘূর্ণন এবং স্বচ্ছতা) সঞ্চালন করতে পারে। সুতরাং, যদি আপনার কাছে একটি TextView
অবজেক্ট থাকে, তাহলে আপনি পাঠ্যটিকে সরাতে, ঘোরাতে, বৃদ্ধি করতে বা সঙ্কুচিত করতে পারেন। যদি এটির একটি ব্যাকগ্রাউন্ড ইমেজ থাকে, তাহলে ব্যাকগ্রাউন্ড ইমেজটি টেক্সট সহ রুপান্তরিত হবে। animation package
টুইন অ্যানিমেশনে ব্যবহৃত সমস্ত ক্লাস সরবরাহ করে।
অ্যানিমেশন নির্দেশাবলীর একটি ক্রম টুইন অ্যানিমেশনকে সংজ্ঞায়িত করে, XML বা Android কোড দ্বারা সংজ্ঞায়িত। একটি লেআউট সংজ্ঞায়িত করার মতো, একটি XML ফাইলের সুপারিশ করা হয় কারণ এটি অ্যানিমেশনের হার্ড-কোডিংয়ের চেয়ে বেশি পঠনযোগ্য, পুনরায় ব্যবহারযোগ্য এবং অদলবদলযোগ্য। নীচের উদাহরণে, আমরা XML ব্যবহার করি। (আপনার অ্যাপ্লিকেশন কোডে একটি অ্যানিমেশন সংজ্ঞায়িত করার বিষয়ে আরও জানতে, XML এর পরিবর্তে, AnimationSet
ক্লাস এবং অন্যান্য Animation
সাবক্লাসগুলি পড়ুন।)
অ্যানিমেশন নির্দেশাবলী সংজ্ঞায়িত করে যে রূপান্তরগুলি আপনি ঘটতে চান, সেগুলি কখন ঘটবে এবং তাদের প্রয়োগ করতে কত সময় লাগবে। রূপান্তরগুলি ক্রমিক বা একযোগে হতে পারে - উদাহরণস্বরূপ, আপনি একটি টেক্সটভিউ এর বিষয়বস্তু বাম থেকে ডানে সরাতে পারেন, এবং তারপর 180 ডিগ্রি ঘোরান, অথবা আপনি পাঠ্যটি সরাতে এবং একই সাথে ঘোরাতে পারেন৷ প্রতিটি রূপান্তরটি সেই রূপান্তরের জন্য নির্দিষ্ট পরামিতিগুলির একটি সেট নেয় (আকার পরিবর্তনের জন্য শুরুর আকার এবং শেষের আকার, শুরুর কোণ এবং ঘূর্ণনের জন্য শেষ কোণ এবং আরও অনেক কিছু), এবং সাধারণ পরামিতিগুলির একটি সেট (উদাহরণস্বরূপ, শুরুর সময় এবং সময়কাল) . একাধিক রূপান্তর একই সাথে ঘটতে, তাদের একই শুরুর সময় দিন; তাদের অনুক্রমিক করতে, শুরুর সময় এবং পূর্ববর্তী রূপান্তরের সময়কাল গণনা করুন।
অ্যানিমেশন XML ফাইলটি আপনার Android প্রকল্পের res/anim/
ডিরেক্টরির অন্তর্গত। ফাইলটিতে অবশ্যই একটি একক মূল উপাদান থাকতে হবে: এটি হয় একটি একক <alpha>
, <scale>
, <translate>
, <rotate>
, interpolator element, অথবা <set>
উপাদান যা এই উপাদানগুলির গোষ্ঠী ধারণ করে (যা অন্যটি অন্তর্ভুক্ত করতে পারে <set>
)। ডিফল্টরূপে, সমস্ত অ্যানিমেশন নির্দেশাবলী একযোগে প্রয়োগ করা হয়। সেগুলিকে ক্রমানুসারে ঘটানোর জন্য, আপনাকে অবশ্যই startOffset
বৈশিষ্ট্যটি নির্দিষ্ট করতে হবে, যেমনটি নীচের উদাহরণে দেখানো হয়েছে।
ApiDemos-এর একটি থেকে নিম্নলিখিত XMLটি প্রসারিত করার জন্য ব্যবহৃত হয়, তারপরে একই সাথে একটি ভিউ অবজেক্টকে স্পিন এবং ঘোরানোর জন্য।
<set android:shareInterpolator="false"> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="1.0" android:toXScale="1.4" android:fromYScale="1.0" android:toYScale="0.6" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="700" /> <set android:interpolator="@android:anim/decelerate_interpolator"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" android:fillBefore="false" /> <rotate android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" /> </set> </set>
স্ক্রীন স্থানাঙ্কগুলি (এই উদাহরণে ব্যবহার করা হয়নি) উপরের বাম দিকের কোণে (0,0) হয় এবং আপনি নীচে এবং ডানদিকে যাওয়ার সাথে সাথে বৃদ্ধি পায়।
কিছু মান, যেমন pivotX, বস্তুর আপেক্ষিক বা পিতামাতার আপেক্ষিকভাবে নির্দিষ্ট করা যেতে পারে। আপনি যা চান তার জন্য সঠিক বিন্যাসটি ব্যবহার করতে ভুলবেন না (অভিভাবকের সাথে সম্পর্কিত 50% এর জন্য "50" বা "50%" 50% এর নিজের সাথে সম্পর্কিত)।
আপনি একটি Interpolator
বরাদ্দ করে সময়ের সাথে কিভাবে একটি রূপান্তর প্রয়োগ করা হয় তা নির্ধারণ করতে পারেন। অ্যান্ড্রয়েডে বেশ কয়েকটি ইন্টারপোলেটর সাবক্লাস রয়েছে যা বিভিন্ন গতি বক্ররেখা নির্দিষ্ট করে: উদাহরণস্বরূপ, AccelerateInterpolator
একটি রূপান্তরকে ধীর গতিতে শুরু করতে এবং গতি বাড়াতে বলে। প্রতিটির একটি বৈশিষ্ট্য মান রয়েছে যা XML-এ প্রয়োগ করা যেতে পারে।
প্রকল্পের res/anim/
ডিরেক্টরিতে hyperspace_jump.xml
হিসাবে সংরক্ষিত এই XML এর সাথে, নিম্নলিখিত কোডটি এটিকে উল্লেখ করবে এবং লেআউট থেকে একটি ImageView
অবজেক্টে প্রয়োগ করবে।
কোটলিন
AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation -> findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation) }
জাভা
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage); Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); spaceshipImage.startAnimation(hyperspaceJumpAnimation);
startAnimation()
এর বিকল্প হিসাবে, আপনি
দিয়ে অ্যানিমেশনের জন্য একটি শুরুর সময় নির্ধারণ করতে পারেন, তারপর Animation.setStartTime()
দিয়ে ভিউতে অ্যানিমেশন নির্ধারণ করতে পারেন।View.setAnimation()
এক্সএমএল সিনট্যাক্স, উপলব্ধ ট্যাগ এবং বৈশিষ্ট্য সম্পর্কে আরও তথ্যের জন্য, অ্যানিমেশন রিসোর্স দেখুন।
দ্রষ্টব্য: আপনার অ্যানিমেশন যেভাবে সরানো বা আকার পরিবর্তন করতে পারে তা নির্বিশেষে, আপনার অ্যানিমেশন ধারণকারী ভিউয়ের সীমাগুলি এটিকে সামঞ্জস্য করার জন্য স্বয়ংক্রিয়ভাবে সামঞ্জস্য করবে না। তা সত্ত্বেও, অ্যানিমেশনটি এখনও তার দৃশ্যের সীমার বাইরে আঁকা হবে এবং ক্লিপ করা হবে না। যাইহোক, ক্লিপিং ঘটবে যদি অ্যানিমেশনটি প্যারেন্ট ভিউ এর সীমা অতিক্রম করে।