English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
استخدم واجهة OnTouchListener لمراقبة تمرير listView، من خلال مقارنة حجم الموقع السابق مع الحالي، لتحديد اتجاه التمرير، وبالتالي تحديد ما إذا كان يجب عرض أو إخفاء التركيبة المطلوبة مع تأثير الرسوم المتحركة.
1. عرض وإخفاء Toolbar تلقائيًا
أولاً، أضفHeaderView إلى listView لتجنب حجب الItem الأول من 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 هو ارتفاعActionBar للنظام
تحديد متغير mTouchSlop للحصول على المسافة الأدنى للتمرير التي تعتبرها النظام
mTouchSlop=ViewConfiguration.get(this).getScaledTouchSlop(); // المسافة الأدنى للتمرير التي تعتبرها النظام
تحديد حدث التمرير
bbsListView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { الانتقال (حدث.get_action()); { حالة 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، وإلا قد يحدث تضارب. بالإضافة إلى التضمين التجميعي
dependencies{ compile fileTree(include:['*.jar'],dir:'libs') compile 'com.android.support:appcompat-v7:21.0.3' }
2. عند إخفاء وإظهار العناصر ليست toolbar، بل layout مخصص الخاص بنا myView، يجب الانتباه لبعض النقاط،
1) يجب استخدام layout مطلق، لذا يمكننا أن نضيف layout مخصص فوق listView.
2) لتجنب تغطية第一个 Item من قبل myView، أضف HeaderView إلى listView، في هذه الحالة يجب قياس طول myView، ويجب تنفيذ هذه المهمة على thread UI، وإلا سيحدث خطأ.
final View header=new View(this); //إضافة headView إلى listView لتجنب تغطية第一个 item header.post(new Runnable() { public void run() { header.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, myView.getHeight())); } });
الأخرى مثل toolbar
هذا هو نهاية محتويات هذا المقال، نأمل أن تكون قد ساعدتكم في التعلم، ونأمل أن تحصلوا على الدعم والمساندة الكبيرة لتعليم呐喊.
البيان: محتويات هذا المقال تم جمعها من الإنترنت، وتحتفظ بالحقوق الملكية للمراجعين، وقد تم توفير المحتويات من قبل مستخدمي الإنترنت الذين قدموا المساهمات بأنفسهم وأرسلواها بشكل مستقل، ولا تملك هذا الموقع حقوق الملكية، ولا يتم تعديل المحتويات بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية مرتبطة بذلك. إذا اكتشفتم محتويات مشبوهة بمسألة حقوق النسخ، فيرجى إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال '#' ب '@') لإبلاغنا، وتقديم الدليل على ذلك، وإذا تم التحقق من ذلك، سيتم حذف المحتويات المشبوهة فوراً.