في محاولتك لتحقيق حركة مميزة باستخدام ViewPropertyAnimator في Android Studio 2.0 beta 6، حيث تحاول تحريك ImageView داخل Toolbar بحيث تكون مباعدة 20dp من الحافة اليمنى والعلوية، هناك بعض التحديات التي تواجهك في استخدام قيمة العرض الحالية للشاشة.
للتغلب على هذه التحديات وتحقيق الحركة المطلوبة بشكل دقيق على شاشات مختلفة، يمكنك النظر إلى استخدام وحدة القياس الخاصة بـ density-independent pixels (dp). هذا يمكن أن يساعد في توحيد الحجم بشكل أفضل عبر مختلف كثافات الشاشة.
قم بتحديد القيم بوحدة الـ dp بدلاً من الـ pixels باستخدام الدالة التالية:
javafloat density = getResources().getDisplayMetrics().density;
float marginInDp = 20 * density;
ivSearch.animate()
.setInterpolator(new AccelerateInterpolator())
.x(marginInDp)
.y(marginInDp)
.setDuration(250)
.start();
ivSettings.animate()
.setInterpolator(new AccelerateInterpolator())
.x(widthPx - (160 * density))
.y(marginInDp)
.setDuration(250)
.start();
هذا يتيح لك تحديد المسافة بشكل أكثر دقة وتوحيد الحركة عبر مختلف أحجام الشاشة. كما يمكنك اعتماد على المتغير density
لتحديد قيمة الـ dp بناءً على كثافة الشاشة الفعلية.
المزيد من المعلومات
بالطبع، يمكننا استكمال النقاش حول كيفية تحسين الكود وتحقيق أداء أفضل. للبداية، يمكنك استخدام ViewCompat
للتلاعب بمواقع العناصر بشكل مستقل عن نسخة Android Studio المستخدمة، وذلك لدعم نسخ قديمة من نظام التشغيل.
علاوة على ذلك، يمكنك استخدام ViewPropertyAnimatorCompat
لتحسين توافق الأكواد مع مختلف إصدارات نظام التشغيل. قد يكون الكود التالي مفيدًا:
javafloat density = getResources().getDisplayMetrics().density;
float marginInDp = 20 * density;
ViewCompat.animate(ivSearch)
.setInterpolator(new AccelerateInterpolator())
.translationX(marginInDp)
.translationY(marginInDp)
.setDuration(250)
.start();
ViewCompat.animate(ivSettings)
.setInterpolator(new AccelerateInterpolator())
.translationX(widthPx - (160 * density))
.translationY(marginInDp)
.setDuration(250)
.start();
هذا الكود يستخدم ViewCompat.animate()
بدلاً من ivSearch.animate()
و ivSettings.animate()
مما يجعل الكود أكثر توافقًا مع مختلف إصدارات نظام التشغيل. يمكنك أيضاً استخدام مكتبة AndroidX لضمان توافق الكود مع مكتبات الدعم الحديثة.
بهذه الطريقة، يمكنك تحسين قابلية صيانة الكود وضمان تشغيله بشكل سلس على مجموعة متنوعة من الأجهزة والإصدارات من Android.