كيفية استخدام مخصصة الروبوت بارد الأرواح؟ | اختيار CSDN بوين

الكاتب | u012551350

هذه المادة المستقاة من CSDN بلوق كان، سلطة المؤلف

"القناعة"، والكثير من الناس لا راضين عن الوضع الراهن، وجميع أنواع الصراعات، في كثير من الأحيان الغابة من أجل الشجرة، سعيدة دائما إلى الحد من التسرع، وأكثر من ذلك بقليل الهدوء. في مؤلف الأخير الذي الكثير من الأشياء، وعقلية لديها تغيرات كبيرة خضعوا، وتحقيق واقع بلا حول ولا قوة، بعيدا عن المنزل في مدينة لوه جي، والسعي متهور من الشهرة والثروة، ومن المحتمل أن تعيش من هذا القبيل، كل عصر لديها مشاكلها الخاصة.

يتحدث إرم، وقتا طويلا قبل أن نرى مجموعة متنوعة من العرف LayoutManager جعل جميع أنواع الرسوم المتحركة بارد، لدينا أيضا يريد تحقيقه. لكن في كل مرة لأن النظام يأتي مع شفرة المصدر وجعل LinearLayoutManager تبدو قوة جاهلة. فقط هذه المرة مشغول، إرم اليوم، إرسال تجريبي بسيط، وأثر هو كما يلي:

أهمية RecyclerView وغني عن القول، وفقا لتجربة الماضي في تطوير والحديث، وأكثر من شاشة واحدة يمكن أن تنزلق واجهة، وأساسا يمكن استخدامه "RecyclerView متعددة من نوع" القيام به، سواء للحفاظ على أو توسيع هي فعالة جدا. أيضا واحدة من مصنع كبير في كثير من الأحيان الأسئلة RecyclerView أسئلة المقابلة ذات الصلة (وزن عالي جدا).

استعمال

mRecyclerView.setLayoutManager (stackLayoutManager = جديد StackLayoutManager (هذا))؛

وتمشيا مع نظام استخدام LinearLayoutManager، ببساطة نص تجريبي، وظيفة واحدة، وذلك أساسا على العمليات والإجراءات وتعديلها وفقا لاحتياجات محددة.

أهمية الرقم من كل سمة:

ملاحظة: لأن هذا البند سيكون مختلفا مع مقياس متدرج، لذلك سيتم تحجيم normalViewGap الفعلية الحوسبة.

مخصص LayoutManager أساسيات

حول أساسيات LayoutManager العرف، يرجى الرجوع إلى المادة التالية، كتبه عظيم:

1، وتشن حافة مخصصة LayoutManager الحادي عشر نوع من الصابون في وقت الذروة (حافة صغيرة العصابات المشاركة مخصص الوضوح المنطقي، ودعا الكتاب المدرسي، والكلاسيكية جدا)

https://blog.csdn.net/u011387817/article/details/81875021

2، وتشانغ شو تونغ إتقان مخصصة LayoutManager (أ) سلسلة افتتاح الأخطاء الشائعة والمشاكل والحذر، API المشترك

https://blog.csdn.net/zxt0601/article/details/52948009

3، وتشانغ شو تونغ إتقان مخصصة LayoutManager (ب) تنفيذ تخطيط تدفق

https://blog.csdn.net/zxt0601/article/details/52956504

4، وتشن يونغ نحو الروبوت كتاب التقليد قناة الجرجير الفيديو توصية شكل قائمة مكدسة RecyclerView-LayoutManager

https://blog.csdn.net/ccy0122/article/details/90515386

هذه المواد عن الأخطاء LayoutManager العرف والملاحظات والتحليل في مكان، جيئة وذهابا رأيت عددا لا بأس به، وآمل مساعدتكم.

LayoutManager مخصص تدفق الأساسية

دعونا الأصناف المعروضة

نحن العرف ViewGroup، التي تريد عرضها دون مشاهدة، لا شيء أكثر من ثلاثة أشياء:

  • طريقة بإضافة الفرعية مشاهدة addView إضافة ViewGroup مباشرة أو إضافتها مباشرة في أكس.

  • طرق القياس وonMeasure تجاوز هذا القانون لتحديد حجم الخاصة بهم، وحجم كل الفرعية مشاهدة.

  • OnLayout تجاوز أسلوب التخطيط، باستدعاء أسلوب تخطيط الطفل عرض في خلالها تحديد موقعها وحجمها.

في الواقع، والعرف LayoutManager، في عملية هي نفسها تقريبا، ونحن بحاجة إلى تجاوز أسلوب onLayoutChildren التي من شأنها تهيئة رد أو محول قواعد البيانات التحديث، التي أصبحت فيها هذه الطريقة، ما عليك القيام به في الأمور التالية:

  • قبل التخطيط، ونحن بحاجة إلى استدعاء يتم فصل طريقة detachAndScrapAttachedViews لعناصر الشاشة خارج، وضبط الموقف والبيانات الداخلية، ثم إضافته مرة أخرى (إذا لزم الأمر)؛

  • بعد الانفصال، نجد وسيلة لإضافتها مرة أخرى، لذلك فمن الضروري إضافة addView بالمناسبة، أن هذه مشاهدة أين تحصل عليه؟ نحن بحاجة إلى استدعاء رسكلر من getViewForPosition (موقف الباحث) طريقة للحصول على.

  • البند حصلت وإضافته يلي، ونحن بحاجة أيضا لقياس ذلك، وهذه المرة يمكنك الاتصال measureChild أو measureChildWithMargins الطريقة، الفرق كان ونحن نعلم بالفعل، وأعتقد يمكن للطلاب اختيار وسيلة أكثر ملاءمة وفقا لطلب.

  • ما يجب القيام به في النهاية قياس ذلك؟ نعم، هذا هو التخطيط، ونحن عازمون على استخدام layoutDecorated أو layoutDecoratedWithMargins طريقة وفقا لطلب.

  • في العادة في ViewGroup، والانتهاء من تخطيط يمكنك تشغيل لرؤية النتائج، ولكن أيضا في LayoutManager شيء مهم جدا، واستردادها، بعد أن تخطيط، ولكن العناصر التي تم استردادها أيضا بعض لم تعد هناك حاجة لضمان انزلاق الطلاقة.

تشن فوق العرف LayoutManager حافة صيغة XI Feilongzaitian (https://blog.csdn.net/u011387817/article/details/81875021).

تحقيق تخطيط

انظر تحت المعلمات ذات الصلة:

إذا قمت بإزالة itemView التحجيم، والشفافية، والرسوم المتحركة، ثم وأثر هو هذا:

نرى آثار LinearLayoutManager نفسه، ولكن لا تستخدم LinearLayoutManager Benpian، ولكن العرف LayoutManager لتحقيقه.

قيمة المؤشر 0 مرة واحدة تماما من شاشة عرض متحركة المسافة المطلوبة، وضع firstChildCompleteScrollLength، غير المفهرسة من 0 إلى عرض مطلوب شاشة الانزلاق مسافة الحركة: firstChildCompleteScrollLength + onceCompleteScrollLength، هي المسافة بين العنصر normalViewGap.

نحن scrol LH طريقة تسجيل orizontallyBy تعويض DX، وتوفير ما مجموعه تعويض mHorizontalOffset، وغير الصفر قيمة المؤشر 0 و في كلتا الحالتين، أصغر مما كان عليه الحال mHorizontalOffset firstChildCompleteScrollLength، وذلك باستخدام كمية التحول بقسمة firstChildCompleteScrollLength وتمريره نسبة الكسر، وبالمثل في حالة عدم صفر قيم المؤشر، الإزاحة طرح للحصول على التمرير نسبة firstChildCompleteScrollLength. وفقا للنسبة المئوية، وكيفية تخطيط childview من السهل جدا.

ثم بدء كتابة التعليمات البرمجية، أولا نلقي اسم الأرض نسبيا الغاز، ودعا StackLayoutManager، والاسم الشائع جيد، ها ها ها.

StackLayoutManager الميراث RecyclerView.LayoutManager، يحتاج إلى إعادة صياغة طريقة generateDefaultLayoutParams:

 Override الجمهور RecyclerView.LayoutParams generateDefaultLayoutParams { العودة RecyclerView.LayoutParams الجديدة (RecyclerView.LayoutParams.WRAP_CONTENT، RecyclerView.LayoutParams.WRAP_CONTENT)؛ }

نلقي نظرة على أعضاء من المتغيرات:

 / ** * وعلى مسافة كاملة تتحرك المطلوبة للتركيز الشريحة * / تعويم الخاص onceCompleteScrollLength = -1. / ** * لأول مرة على الرأي دون تعويض * / تعويم الخاص = -1 firstChildCompleteScrollLength. / ** * شاشة العرض الأولى هي موقف واضح من * / mFirstVisiPos كثافة العمليات الخاصة. / ** * شاشة مرئية للعرض الأخير من موقف * / mLastVisiPos كثافة العمليات الخاصة. / ** * إجمالي الأفقي تعويض * / mHorizontalOffset طويلة الخاص؛ / ** * الهامش بين وجهة النظر * / تعويم الخاص normalViewGap = 30 . الباحث الخاص childWidth = 0؛ / ** * يتم تحديده تلقائيا * / isAutoSelect منطقية الخاص = صحيح. // حدد الرسوم المتحركة خاصة ValueAnimator selectAnimator.

ثم نلقي نظرة على scrol LH طريقة orizontallyBy:

 Override scrol كثافة العمليات العامة LH orizontallyBy (DX كثافة العمليات، RecyclerView.Recycler إعادة تدوير، دولة RecyclerView.State) { // حرك إصبعك من اليمين إلى اليسار، DX >  0؛ حرك إصبعك من اليسار إلى اليمين، DX <  0؛ 0 // والتشريد، وبطبيعة الحال، لا يتحرك أي طفل مشاهدة إذا (DX == 0 || getChildCount == 0) { العودة 0؛ } // معالجة الأخطاء تعويم realDx = DX / 1.0f. إذا (Math.abs (realDx) <  0.00000001f) { العودة 0؛ } mHorizontalOffset + = DX. DX = التعبئة (إعادة تدوير، والدولة، DX)؛ عودة DX. } خاص كثافة التعبئة (RecyclerView.Recycler إعادة تدوير، دولة RecyclerView.State، DX كثافة العمليات) { الباحث resultDelta = DX. resultDelta = فيل LH orizontalLeft (إعادة تدوير، والدولة، DX)؛ recycleChildren (إعادة تدوير)؛ العودة resultDelta. } فيل كثافة العمليات الخاص LH orizontalLeft (RecyclerView.Recycler إعادة تدوير، دولة RecyclerView.State، الباحث DX) { // ---------------- 1، والكشف عن الحدود ----------------- إذا (DX <  0) { // وصلت الى الحد الأيسر إذا (mHorizontalOffset <  0) { mHorizontalOffset = DX = 0؛ } } إذا (DX >  0) { إذا (mHorizontalOffset > = GetMaxOffset) { يتم احتساب // إزاحة كحد أقصى وفقا للحق في أقصى حافة الشريحة mHorizontalOffset = (المدى) getMaxOffset. DX = 0؛ } } // مرأى ومسمع منفصل، إضافة إلى مخبأ مؤقت detachAndScrapAttachedViews (إعادة تدوير)؛ تطفو startX = 0؛ تعويم جزء = 0F. منطقية isChildLayoutLeft = صحيح. مشاهدة tempView =. الباحث tempPosition = -1. إذا (onceCompleteScrollLength == -1) { // بسبب mFirstVisiPos أدناه قد يتغير، لذلك الصفر مع tempPosition tempPosition = mFirstVisiPos. tempView = recycler.getViewForPosition (tempPosition)؛ measureChildWithMargins (tempView، 0، 0)؛ childWidth = getDecoratedMeasurementHorizontal (tempView)؛ } // قد انزلق تصحيح أول mFirstVisiPos عرض مرئي كم كاملة تمثل onceCompleteScrollLength كيف العديد من الشرائح البند firstChildCompleteScrollLength = getWidth / 2 + childWidth / 2؛ إذا (mHorizontalOffset > = FirstChildCompleteScrollLength) { startX = normalViewGap. onceCompleteScrollLength = childWidth + normalViewGap. mFirstVisiPos = (الباحث) Math.floor (Math.abs (mHorizontalOffset - firstChildCompleteScrollLength) / onceCompleteScrollLength) + 1؛ جزء = (Math.abs (mHorizontalOffset - firstChildCompleteScrollLength) onceCompleteScrollLength) / (onceCompleteScrollLength * 1.0f)؛ } {شيء آخر mFirstVisiPos = 0؛ startX = getMinOffset. onceCompleteScrollLength = firstChildCompleteScrollLength. جزء = (Math.abs (mHorizontalOffset) onceCompleteScrollLength) / (onceCompleteScrollLength * 1.0f)؛ } // mLastVisiPos تعيينه مؤقتا لgetItemCount - 1، تطمئن، وتحديد ما إذا كانت وجهة نظر قد فاض الشاشة أدناه اجتياز، وعلى الفور تصحيح القيمة وتنتهي تخطيط mLastVisiPos = getItemCount - 1؛ تطفو normalViewOffset = onceCompleteScrollLength * جزء. منطقية isNormalViewOffsetSetted = كاذبة؛ // ---------------- 3، وتخطيط ----------------- البداية ل(كثافة العمليات ط = mFirstVisiPos، وأنا < = MLastVisiPos، وأنا ++) { عرض البند؛ إذا (ط == tempPosition && tempView! =) { // إذا اتخذت بيانات التهيئة وجهة نظر مؤقت البند = tempView. } {شيء آخر البند = recycler.getViewForPosition (ط)؛ } addView (البند)؛ measureChildWithMargins (البند، 0، 0)؛ إذا (! isNormalViewOffsetSetted) { startX - = normalViewOffset. isNormalViewOffsetSetted = صحيح. } ل كثافة العمليات، ر، ص، ب، ل = (الباحث) startX. ر = getPaddingTop. ص = ل + getDecoratedMeasurementHorizontal (البند)؛ ب = ر + getDecoratedMeasurementVertical (البند)؛ layoutDecoratedWithMargins (البند، ل، ر، ص، ب). startX + = (childWidth + normalViewGap)؛ إذا (startX >  getWidth - getPaddingRight) { mLastVisiPos = ط. كسر. } } عودة DX. }

يتضمن الأسلوب:

 / ** * تعويض الحد الأقصى * *Return * / تعويم الخاص getMaxOffset { إذا (childWidth == 0 || getItemCount == 0) العودة 0؛ عودة (childWidth + normalViewGap) * (getItemCount - 1)؛ } / ** * الحصول على مساحة childView المحتلة في الاتجاه الأفقي، وهامش تؤخذ بعين الاعتبار * * عرضparam *Return * / الباحث العام getDecoratedMeasurementHorizontal (عرض) { RecyclerView.LayoutParams نهائي بارامس = (RecyclerView.LayoutParams) view.getLayoutParams. عودة getDecoratedMeasuredWidth (عرض) + params.leftMargin + Params.rightMargin. } / ** * الحصول على مساحة childView المحتلة في الاتجاه الرأسي، وهامش تؤخذ بعين الاعتبار * * عرضparam *Return * / الباحث العام getDecoratedMeasurementVertical (عرض) { RecyclerView.LayoutParams نهائي بارامس = (RecyclerView.LayoutParams) view.getLayoutParams. عودة getDecoratedMeasuredHeight (عرض) + params.topMargin + Params.bottomMargin. }

إعادة تدوير إعادة استخدامها

كما تستخدم قناة فيديو الروبوت هنا شكل قائمة توصية مكدسة تقليد كتاب الجرجير RecyclerView-LayoutManager في (https://blog.csdn.net/ccy0122/article/details/90515386) تقنيات الاسترداد المستخدمة:

 / ** *param إعادة تدوير * الدولةparam *param دلتا * / خاص كثافة التعبئة (RecyclerView.Recycler إعادة تدوير، دولة RecyclerView.State، دلتا كثافة العمليات) { الباحث resultDelta = دلتا. //. . . إغفال recycleChildren (إعادة تدوير)؛ سجل ( "childCount = " + "،

فائض رفض الخبرة، "وظيفة مبرمج ليست سوى رمز"؟

"EXO" "مشاركة" 190622 "غريب ستوري 3" السجادة الحمراء حفل تصوير مفتوحة، والتفاعل ودية هناك حب خارج الغلاف الجوي

هذه التكنولوجيا، مسكر، BAT إلى أرض الملعب! المبرمجين: أنا بالذعر تماما ...

وضع 190622 استوديو يي شي فاحت ألف اللقطات أسلوب الهيب هوب برنامج طفرة الطعام الجديد

جوجل بيرت أقوى نموذج المصدر المفتوح المستخدمة في البرمجة اللغوية العصبية في | عناوين التكنولوجيا

190622 تشو ييلونغ الترفيه الصور القديمة في وقت مبكر مع الشعر الطنين كميات صغيرة من الحليب

في منتصف العمر ساحة المزرعة، وعنيد الماضي

"الكنز يمكن أن تحلم الماجستير" جولة ناحية الصينية الرسمية خط الانترنت، مؤامرة ومجموعة الأحرف سراح

190622 الإيجابي نقل الطاقة الأرز مع الفاصوليا المشجعين لي يي فنغ الحب الهبات العفوية لكارثة

2019 تعزيز شنتشن دابنغ الجديد للمقاطعة عقدت بنجاح في لوس انجليس

نينتندو لايت تحويل المفرج عنهم: الرائد تجربة المحمولة المحمولة من الذهب الخالص

Yugan السوق الزراعية: معالجة الخصائص تطوير الفقر مساعدة محرك التجارية للمنتجات المائية