これは、recyclerViewのさまざまな使用法、およびカプセル化された小さなユニバーサルアダプターの使用法の最も包括的な要約かもしれません。

序文:これは、recyclerViewのさまざまな使用法をまとめたデモです。また、使用するさまざまな機能をカプセル化する小さなユニバーサルアダプター。他のサードパーティのユニバーサルアダプターを読むと、複雑すぎるように感じます。機能を完成させたいのですが複雑なので、理解や学習はしません。カプセル化には少し時間がかかり、recyclerViewのさまざまな使用法を簡単に要約しました。

このデモの内容についてお話します。

  • 小さなユニバーサルアダプター、手を自由にします。数十行のコードを書く前に、それを解くのに10行しかかかりません。
  • 複数のレイアウト
  • 頭の下部を追加してください(線形、グリッド、ウォーターフォール)
  • グリッドレイアウトは均等な分割線をサポートします(より複雑で、5列以下が処理され、数学の優れた学生が関数を整理するのに役立つため)。
  • アニメーションの読み込みをサポート
  • 水の波紋効果のあるアイテムクリック
  • recyclerViewのさまざまなアダプターのリフレッシュの詳細な説明:notifyItemChanged、notifyItemInserted、notifyItemRangeChangedなど。6種類のリフレッシュ
  • アイテムをドラッグして順序を調整し、アイテムのサイドスリップ
  • 削除または指定などのアイテムのサイドスライドメニュー(アイテムを左にスライドさせてサイドスライドメニューを表示したり、アイテムの下部で非表示にしたりできます)
  • SmartRefreshLayout、さまざまなゼリー効果とともに使用して、プルアップおよびプルダウンします。そして、水平方向のrecyclerViewゼリー、左のスライドなど。
  • recyclerViewアイテムは展開または折りたたむことができ、展開するとより多くのサブセットが表示されます
  • recyclerViewは、viewPager効果を実現します。
  • グリッドrecyclerViewスパンをマージしてさまざまな効果を実現
  • 異なる効果を得るためのアイテムの重複
  • Qishipの考え方に従って、爆発的な効果を持つrecyclerViewを実現してください
  • recyclerViewの粘着性のあるヘッド
  • CoordinatorLayoutと組み合わせると、特定のレイアウトが上部に配置され、さまざまな効果

リンク集

uiで再び影に出会ったとき、影の部分が気になっていて一人で来るとミスUiに言った

シャドウレイアウトは、どのようなコントロールであっても、シャドウレイアウトに配置して、すぐに必要なシャドウを楽しむことができます。
アドレス:https : //github.com/lihangleo2/ShadowLayout

複数の効果があります

アニメーションなどにも使用できるマルチエフェクトスマートログインボタン。
アドレス:https : //github.com/lihangleo2/SmartLoadingView

1.使いやすい

  • プロジェクトbuild.gradleは次のように追加されます
    allprojects {
          
          
     	repositories {
          
          
     		maven {
          
           url 'https://jitpack.io' }
     	}
     }
    
  • 次のようにアプリのbuild.gradleを追加します
    dependencies {
          
          
            implementation 'com.github.lihangleo2:MoreAboutRecyclerView:1.0.0'
    }
    

1.1、単純なリストを実装する

アダプターコード(viewHolderは外部で記述できるため、直接再利用できることもあります):

//集成万能适配器,并注明此适配器用到的数据类型
public class SimpleAdapter extends BaseAdapter<String> {
    
    
    @Override
    public RecyclerView.ViewHolder getViewHolder(ViewGroup viewGroup, int viewType) {
    
    
        //SimpleHolder建议写在外面,这样就搞定了
        return new SimpleHolder(getResId(viewGroup, R.layout.item_simple));
    }

    @Override
    public void onBindMyViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
    
    
    //这里还是和正常的onBindViewHolder一样。因为需要封装开启动画或添加头部,所以用onBindMyViewHolder继承出来处理逻辑
    }

}

アクティビティ内のコード(単純なリスト表示が完了しています):

        adapter = new SimpleAdapter();
        adapter.setDataList(arrayList);
        recyclerView.setAdapter(adapter);

1.2。複数のレイアウトを実現する

複数のレイアウトの場合、getMyViewType(int position)を書き換えるだけで、コードは次のようになります。

public class MainAdapter extends BaseAdapter<MainBean> {
    
    
    final int TYPE_ONE = 0;
    final int TYPE_TWO = 1;
    
    @Override
    public int getMyViewType(int position) {
    
    
        if (position % 2 == 0) {
    
    
            return TYPE_ONE;
        } else {
    
    
            return TYPE_TWO;
        }
    }


    @Override
    public RecyclerView.ViewHolder getViewHolder(ViewGroup viewGroup, int viewType) {
    
    
        switch (viewType) {
    
    
            case TYPE_ONE:
                return new MainHolder(getResId(viewGroup, R.layout.item_main_one));
            default:
                return new MainHolder(getResId(viewGroup, R.layout.item_main_two));
        }
    }

    @Override
    public void onBindMyViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
    
    
        
    }

}

1.3、クリックイベントを設定する

インターフェースonItemClickListenerおよびonItemLongClickListenerがBaseAdapterにカプセル化されました。コントロールのクリックイベントを個別に設定する必要がある場合は、アクティビティがこのインターフェイスを実装している限り、新しいアダプターが終了したときにadapter.setOnItemClickListener(this)に設定します。次に、onBindMyViewで使用します。
アイテムクリックなら直接セットするだけでベースで処理済み。

adapter.setOnItemClickListener(new BaseAdapter.OnItemClickListener<MainBean>() {
    
    
            @Override
            public void onItemClick(MainBean item, int position) {
    
    
                
            }
        });

効果は次のとおりです。
ホームページはマルチレイアウトで、通常は簡単に使用できます
画像

2.頭を追加します

頭を追加するだけです(線形、グリッド、ウォーターフォールがすべてです):

 View headLayout = LayoutInflater.from(AddHeadActivity.this).inflate(R.layout.layout_head, null);
 adapter.addHeadView(headLayout);

ヘッダーと下部を追加することは、実際には複数のレイアウトを使用していますが、パッケージ化はすでに行われています。
ヘッダーをグリッドに追加する特別な処理は、BaseAdapterのonAttachedToRecyclerViewメソッドにあります。
ウォーターフォールフローにヘッダーを追加する特別な処理は、BaseAdapterのonViewAttachedToWindowにあります。

2.1、グリッドrecyclerViewの等分割線

ブロガーが処理する等分割線が必要な場合は、以下を追加します。

 //设置网格布局间隔,不用担心会不会不等分,一切已经计算好(由于是在复杂之计算到了5列)
 adapter.setGridDivide(recyclerView, (int) getResources().getDimension(R.dimen.dp_10));

この文では、分割線は10 dpである必要があり、アイテムの歪みはありません。この説明については写真を見てください:

私たちが設定した分割線が20であると仮定すると:
x1 = x2 = x3 = x4 = x5 = x6 = 20;
そして:
x1 + w + x2 = x3 + w + x4 = x5 + w + x6;画面が均等に分割され
ていると言う人もいます分割線は任意に設定できます。画像がある場合、上記のルールに従わないと、パディングによって画像が抑制されていることがわかります。
現在達成される効果は次のとおりです:x1 = x2 + x3 = x4 + x5 = x6;
上記の分割線が20であると仮定すると、上図から見ることができます:分割線の全長は120で、4つの分割線があり、それぞれが30;
上記の方程式をたどると、x2は10からx1に貸し出され、x5は10からx6に貸し出されます; x3とx4は変更されません。次に、分割線に設定します。
列の数が増えると、関数が不規則になるためです。ブロガーはコードを使用して、5つの列を判断して処理しました。数が多いので、解決してください

効果は次のとおりです。

線形 グリッド 滝の流れ

3.アニメーションを追加する

ここでアニメーションを処理する方法はたくさんありますが、個人的にはOnBindでアニメーションを処理する方が簡潔で明確だと思います。
コードは以下のように表示されます:

//这是博主封装的几种常见的动画
showItemAnim(AnimationType animationType)
//你还可以自定义动画,只要传入resId即可
showItemAnim(int animResId)

アニメーションはonBindViewで処理されるため、描画する前にadapter.showItemAnim(AnimationType.TRANSLATE_FROM_RIGHT);を呼び出す必要があることに注意してください。

効果は次のとおりです。

線形 グリッド 滝の流れ
複数のアニメーションを開始する

4.アイテムをクリックして、拡散効果を丸で囲みます

これは実際にはリップルを使用して行われ、レイアウトの背景に直接設定されますandroid:background = "@ drawable / linerlayout_water_selector"
はここではカプセル化されていません。レイアウトのクリック領域が行全体であるか、itemViewにギャップがある可能性があるため、まだ自分で設定するのが最も妥当です。

効果は次のとおりです。

5. RecyclerViewさまざまなアダプターの更新

コード内のコメントは詳細すぎないようにしてください。ここでは紹介しません

効果は次のとおりです。

6.アイテムの横滑りとドラッグ効果

システムクラスItemTouchHelperを使用して完了し、プロジェクトのDragSwipHelperにカプセル化します。
この効果だけが必要です。

new DragSwipHelper().attachSwipAndDragRecyclerView(recyclerView, adapter);

効果は次のとおりです。

7.アイテムはサイドスリップメニューを実装します(偉人に感謝)

以前から自分のプロジェクトに組み込まれていたため、牛の住所を忘れてしまいました。一般的な考え方は、分割線、onDrawOver、およびonDrawを完了することです。
この機能には2つの効果があります。1.サイドスライドメニューは、項目を左にスライドします。2.サイドスライディングメニューはアイテムアイテムの下に隠されています。プロジェクトにカプセル化されたSwipItemHelper
は以下を使用します。

new SwipItemHelper(adapter).attachRecyclerView(recyclerView)

サイドスライドメニューのレイアウトはアイテムレイアウト内にあり、レイアウトの配置により2つの効果も実現

効果は次のとおりです。

8. SmartRefreshLayoutで使用(実際のアプリケーション)

何を使用したかを理解する必要があります。

効果は次のとおりです。

9. recyclerViewは展開/折りたたみ効果を実現し、展開すると複数のサブセットを表示します

ここで使用される原則は、複数のレイアウト、notifyItemRangeInserted、notifyItemRangeRemoved、デモで詳しく説明されています

効果は次のとおりです。

10. RecyclerViewはviewPager効果を実現します

プロジェクトでviewPagerエフェクトが必要になることもありますが、アイテムを動的に削除して追加する必要があります。このメソッドはこの時点で使用でき、アニメーション化することもできます

効果は次のとおりです。

11.グリッドrecyclerViewレイアウトマージ

グリッドにレイアウトを追加するという考え方がここで使用されており、効果は非常に珍しいです

効果は次のとおりです。

12.アイテムを重ねてクールな効果を実現

この機能は以前のプロジェクトで使用されていました。多重化が必要なため、recyclerViewの分割線をすばやく実装できることがわかりました

効果は次のとおりです。

13、カスタム折りたたみrecyclerView(チー船の偉大な神に感謝)

一般的な考え方は、LayoutManagerを書き換えることです。偉大な神のつながりがデモに入れられました、誰もが行って学ぶことができます、それは強すぎます。recyclerViewの私の理解を超えて。
この機能には2つの効果もあります。1。アイテムを最後までスライドできます。2。最後の全画面のアイテムをスライドできません。これは、ホームページに水平方向のrecyclerViewを配置することです。

効果は次のとおりです。

14、StickyHeadListView

スティッキーヘッダーのリストです。ここでは、recyclerViewの分割行処理については触れませんでした。シンプルなテキストのスティッキーヘッダーを示す多くのデモを見つけました。デモには画像の処理も示されていますが、操作するのは依然として便利です。使用する必要がある場合は、デモで見ることができ、コメントは完璧です。

効果は次のとおりです。

15. CoordinatorLayoutで使用する

CollapsingToolbarLayoutがより特別で非常に便利なさまざまなクールな効果を実現でき、視覚的な違いと段階的な透明度を実現できます。xmlコメント完璧

効果は次のとおりです。

結論:見やすいように機能を分離するために、繰り返しのコードを書いて手を痛めます。もしあなたが気分が悪くて良心がある場合は、0 0と言ってください。

githubアドレスはここをクリックしてください!

おすすめ

転載: blog.csdn.net/leol_2/article/details/100143081