<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Android仿支付寶應用分類

          共 5969字,需瀏覽 12分鐘

           ·

          2022-01-13 00:56

          仿支付寶的應用分類CoordinatorLayout + AppBarLayout +?
          TabLayout + RecyclerView(嵌套RecyclerView)

          錄制的gif 太大了,超過10M不給上傳。。。就給圖片吧



          實現(xiàn)上述效果思路:


          1、如何實現(xiàn)懸浮效果

              <androidx.coordinatorlayout.widget.CoordinatorLayout            android:layout_width="match_parent"            android:layout_height="match_parent">

          <com.google.android.material.appbar.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:expanded="true" app:elevation="0dp" >
          <TextView android:layout_width="match_parent" android:layout_height="200dp" android:text="頂部內(nèi)容" android:textSize="30sp" android:gravity="center" app:layout_scrollFlags="scroll" />
          <com.google.android.material.tabs.TabLayout android:id="@+id/tab_app_group" android:layout_width="match_parent" android:layout_height="50dp" android:background="#fff" app:tabTextColor="#333" app:tabSelectedTextColor="#f00" app:tabIndicatorColor="#f00" app:tabIndicatorFullWidth="false" app:tabInlineLabel="false" app:tabMode="scrollable" app:tabRippleColor="#fff" app:tabIndicatorHeight="1dp" /> com.google.android.material.appbar.AppBarLayout>

          <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_all" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" app:layout_behavior="@string/appbar_scrolling_view_behavior" />
          androidx.coordinatorlayout.widget.CoordinatorLayout>
          // app:elevation="0dp" 去除AppBarLayout底部黑線


          2、如何實現(xiàn)聯(lián)動?


          TabLayout 和 RecyclerView 監(jiān)聽點擊事件和滾動事件

          mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { if (!isInit){ mAppBar.setExpanded(false, true); //點擊時置頂bar } if (isInit) isInit = false;
          //點擊tab的時候,RecyclerView自動滑到該tab對應的item位置 int position = tab.getPosition(); if (!isScroll) { // 有動畫且滾動到該分組 mSmoothScroller.setTargetPosition(position); mLinearLayoutManager.startSmoothScroll(mSmoothScroller); } }
          @Override public void onTabUnselected(TabLayout.Tab tab) {
          }
          @Override public void onTabReselected(TabLayout.Tab tab) {
          }????????});
          mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE) { isScroll = false; } else { isScroll = true;????????????????} }
          @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); //滑動RecyclerView list的時候,根據(jù)最上面一個Item的position來切換tab// mTabLayout.setScrollPosition(mLinearLayoutManager.findFirstVisibleItemPosition(), 0, true); LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); TabLayout.Tab tabAt = mTabLayout.getTabAt(layoutManager.findFirstVisibleItemPosition()); if (tabAt != null && !tabAt.isSelected()) { tabAt.select(); } }????????});

          3、最后的空白處怎么做的?


          就是多了個foot,動態(tài)計算高度。

          class AppGroupAdapter extends RecyclerView.Adapter{
          public static final int VIEW_TYPE_ITEM = 1; public static final int VIEW_TYPE_FOOTER = 2; protected List mData;
          /** * item高度 */ private int itemHeight;
          private Context context; public AppGroupAdapter(List data, Context context){ mData = data; this.context = context;// mRecycledViewPool = new RecyclerView.RecycledViewPool(); }
          @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { if (viewType == VIEW_TYPE_ITEM) { View view = LayoutInflater.from(context).inflate(R.layout.app_group, parent, false); return new ItemVH(view); } else { //Footer是最后留白的位置,以便最后一個item能夠出發(fā)tab的切換 View view = new View(context); Log.e("footer", "parentHeight: " + mRecyclerViewHeight + "--" + "itemHeight: " + itemHeight); view.setLayoutParams( new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, mRecyclerViewHeight - itemHeight)); return new FootVH(view); } }
          @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { if (holder.getItemViewType() == VIEW_TYPE_ITEM){ final ItemVH vh = (ItemVH) holder; vh.tvGroup.setText(mData.get(position).getName()); vh.recyclerView.setRecycledViewPool(mRecycledViewPool); vh.recyclerView.setHasFixedSize(false);// vh.recyclerView.setNestedScrollingEnabled(false);
          GridLayoutManager gridLayoutManager = new GridLayoutManager(context, 4){
          @Override public boolean canScrollVertically() { return false; }
          @Override public void onLayoutCompleted(RecyclerView.State state) { super.onLayoutCompleted(state); mRecyclerViewHeight = mRecyclerView.getHeight(); itemHeight = vh.itemView.getHeight(); } }; gridLayoutManager.setOrientation(RecyclerView.VERTICAL);
          vh.recyclerView.setLayoutManager(gridLayoutManager);
          AppsAdapter appsAdapter = new AppsAdapter(context); appsAdapter.list.addAll(mData.get(position).getApps()); vh.recyclerView.setAdapter(appsAdapter); } }
          @Override public int getItemCount() { return mData.size() + 1; }
          @Override public int getItemViewType(int position) { if (position == mData.size()) return VIEW_TYPE_FOOTER; return VIEW_TYPE_ITEM; }
          class FootVH extends RecyclerView.ViewHolder{
          public FootVH(@NonNull View itemView) { super(itemView); } }
          class ItemVH extends RecyclerView.ViewHolder{
          private TextView tvGroup; private RecyclerView recyclerView; public ItemVH(@NonNull View itemView) { super(itemView);
          tvGroup = itemView.findViewById(R.id.tv_name); recyclerView = itemView.findViewById(R.id.recycler); } }????}

          源碼地址:
          https://github.com/lxfwelldone/Demo_ZFBApp.git

          到這里就結(jié)束啦。
          瀏覽 73
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  影音先锋成人影视 | 国产伦理,久久做,天天做 | 中文字幕日产乱码中 | www.婷婷五月天.com | 色丁香视频在线观看的 |