English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
استخدم واجهة OnTouchListener لمراقبة اللمس في listView، من خلال مقارنة حجم الأحداث مع الأحداث السابقة، تحديد اتجاه الحركة، وباستخدام الاتجاه تحديد ما إذا كان يجب عرض أو إخفاء التركيبة المطلوبة مع تأثير الرسوم المتحركة.
1. عرض وإخفاء Toolbar تلقائيًا
أولاً، أضف HeaderView إلى listView لتجنب حجب الأوليئة من قبل Toolbar.
View header=new View(this); header.setLayoutParams(new AbsListView.LayoutParams( AbsListView.LayoutParams.MATCH_PARENT, (int)getResources().getDimension(R.dimen.abc_action_bar_default_height_material))); mListView.addHeaderView(header); //R.dimen.abc_action_bar_default_height_material هو ارتفاع Action Bar النظام
تحديد متغير mTouchSlop للحصول على المسافة الأدنى التي يعتبرها النظام حركة
mTouchSlop=ViewConfiguration.get(this).getScaledTouchSlop(); // المسافة الأدنى التي يعتبرها النظام حركة
تحديد الحدث اللمس
bbsListView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { المحول(event.getAction()) { حالة MotionEvent.ACTION_DOWN: mFirstY=الإصبع.getY(); break; case MotionEvent.ACTION_MOVE: mCurrentY = event.getY(); if (mCurrentY - mFirstY > mTouchSlop) direction = 0; // انسياب listView للأسفل else if (mFirstY - mCurrentY > mTouchSlop) direction = 1; // انسياب listView لأعلى if (direction == 1) { if (mShow) { toolbarAnim(1); // إخفاء العنصر العلوى mShow = !mShow; } } else if (direction == 0) { if (!mShow) { toolbarAnim(0); // عرض العنصر العلوى mShow = !mShow; } } case MotionEvent.ACTION_UP: break; } return false; } }); }
تحريك الخصائص
protected void toolbarAnim(int flag) { if (set != null && set.isRunning()) { set.cancel(); } if (flag == 0) { mAnimator1 = ObjectAnimator.ofFloat(mToolbar, "translationY", linearView.getTranslationY(), 0); mAnimator2 = ObjectAnimator.ofFloat(mToolbar, "alpha", 0f, 1f); } else if (flag == 1) { mAnimator1 = ObjectAnimator.ofFloat(mToolbar, "translationY", linearView.getTranslationY(), -linearView.getHeight()); mAnimator2 = ObjectAnimator.ofFloat(mToolbar, "alpha", 1f, 0f); } set = new AnimatorSet(); set.playTogether(mAnimator1, mAnimator2); set.start(); } // الارتفاع المطلق وخصائص التحرك الشفاف
عند الاستخدام، يجب أن يستخدم theme NoActionBar، وإلا قد يسبب تعارض. كما يجب إدخال التجميع
الاعتمادات { مقوم بتجميع شجرة الملفات (include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:21.0.3' }
2. عندما يكون العنصر الذي يتم عرضه أو إخفاءه ليس toolbar، بل هو تصميم مخصص من قبلنا myView، يجب الانتباه إلى بعض النقاط،
(1) يجب استخدام تصميم مطلق، مما يسمح لتصميمنا المخصص بالحلقة فوق listView.
(2) لتجنب تعطيل أول عنصر من قبل myView، أضف HeaderView إلى listView، في هذه الحالة يجب قياس طول myView، يجب استخدام هذا الأسلوب، وقم بوضع المهمة في thread UI، وإلا سيحدث خطأ.
final View header=new View(this); //إضافة headView إلى listView لتجنب تعطيل أول عنصر header.post(new Runnable() { public void run() { header.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, myView.getHeight())); } });
الأخرى مثل toolbar
ما تم ذكره أعلاه هو طريقة تحقيق عرض وتخفيض التخطيط التلقائي في ListView لـ Android التي قدمها المحرر لكم، آمل أن يكون ذلك مفيدًا لكم، إذا كان لديكم أي استفسارات، فالرجاء ترك تعليق، وسأقوم بالرد على رسائلكم في أقرب وقت. شكرًا جزيلاً أيضًا لدعمكم لموقع呐喊 لتعليم البرمجة!
البيان: محتوى هذا المقال تم جمعه من الإنترنت، ويتمتع المالك الأصلي بحقوق النشر، يتم جمع المحتوى من قبل المستخدمين عبر الإنترنت بشكل متعاوني وتم تحميله بشكل مستقل، ويحمل هذا الموقع حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل الموقع أي مسؤولية قانونية متعلقة بذلك. إذا رأيت محتوى يشتبه في انتهاك حقوق النسخ، فالرجاء إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) لإبلاغنا، وقدم الدليل على ذلك، وإذا تم التحقق من ذلك، فإن هذا الموقع سيقوم بإزالة المحتوى المزعوم بشكل فوري.