Collapsing ToolBar Layout with viewpager

前端 未结 5 1121
旧时难觅i
旧时难觅i 2021-02-02 12:43

I am using CollapsingBarLayout with viewpager and the fragments of viewpager are having listview, gridview.

Here is my code:

    

        
相关标签:
5条回答
  • 2021-02-02 13:00

    ListView and GridView are not equipped with NestedScrolling functions. And thats needed to work with the CollapsingToolbarLayout.

    The easiest way to make it work, would be to change your ListView and GridView to RecyclerViews (RecyclerView implements NestedScrollingChild).

    0 讨论(0)
  • 2021-02-02 13:02

    I had this issue as well. You'll need to used RecyclerView. Now I understand you must use ListView and GridGiew, but you can use that within a RecyclerView.

    For example, I'll show you how to implement a GridLayout within in a RecyclerView.

    In your fragment layout (that you'd want to implement GridView in), add the following XML

    <android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/recyclerviewGRID"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />
    

    Then on your fragment java,

    on your fragment onCreateView, define the RecyclerView,

    RecyclerView rv = (RecyclerView) v.findViewById(R.id.recyclerviewGRID);
    setupRecyclerView(rv);
    

    Create the method setupRecyclerView,

     private void setupRecyclerView(RecyclerView recyclerView) {
            recyclerView.setHasFixedSize(true);
    
                recyclerView.setLayoutManager(new GridLayoutManager(recyclerView.getContext(), 2));
                mAdapter = new AdapterGridView(getActivity().getApplicationContext(), mItems);
                recyclerView.setAdapter(mAdapter);
    
        }
    

    You must define mAdapter as RecyclerView.Adapter first. Then create your the adapter for the RecyclerView. Note that, mItems is an ArrayList that will contain contents of your list.

    AdapterGridView.java

    public class AdapterGridView extends RecyclerView.Adapter<AdapterGridView.ViewHolder> {
    
        ArrayList<AdItem> mItems;
        Context context, contxt;
    
        public AdapterGridView(Context context, ArrayList<AdItem> mItems) {
            this.context = context;
            this.mItems = mItems;
        }
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    
    //attach your list item layout here, mine in this case is called list_item_grid_item
            View v = LayoutInflater.from(viewGroup.getContext())
                    .inflate(R.layout.list_item_grid_item, viewGroup, false);
            ViewHolder viewHolder = new ViewHolder(v);
            return viewHolder;
        }
    
        @Override
        public void onBindViewHolder(ViewHolder viewHolder, int i) {
    AdItem singleItem = mItems.get(i);
    
    //attach data to your layout as the following manner
    viewHolder.tvspecies.setText(singleItem.getName());
    
        }
    
        @Override
        public int getItemCount() {
    
    //return the number of list items
            return mItems.size();
        }
    
        class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    
            public ImageView imgThumbnail, avatar;
            public TextView tvspecies, adIDLBL;
    
    
            public ViewHolder(View itemView) {
                super(itemView);
                itemView.setClickable(true);
                itemView.setOnClickListener(this);
    
    //define your list item views, basically the stuff in list_item_grid_item
                imgThumbnail = (ImageView)itemView.findViewById(R.id.img_thumbnail);
                tvspecies = (TextView)itemView.findViewById(R.id.tv_species);
    
            }
    
            @Override
            public void onClick(View v) {
                //handle item click events
            }
        }
    }
    
    0 讨论(0)
  • 2021-02-02 13:15

    You need put your ViewPager inside AppBar section and setup layout_behavior :

    <android.support.design.widget.AppBarLayout>>
        <android.support.design.widget.CollapsingToolbarLayout>
         // THIS VIEWS WILL BE COLLAPSED
        </android.support.design.widget.CollapsingToolbarLayout>
    
        // THIS VIEWS WILL BE PINNED
        <android.support.v4.view.ViewPager
              android:id="@+id/pager"
              android:layout_width="match_parent"
              android:layout_height="300dp"
              app:layout_behavior="@string/appbar_scrolling_view_behavior">
    
        </android.support.v4.view.ViewPager>
    </android.support.design.widget.AppBarLayout>
    

    If you using Fragments as children of ViewPager you need setup layout_behavior to each fragment inside ViewPager too.

    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    
    0 讨论(0)
  • 2021-02-02 13:16

    collapsing toolbar with tabs using new material design support library

    I used official collapsing toolbar feature of new material design support library.

    here collapsed view height is 256dp and tabs height is 56dp

    i made following path

    i cut image into two parts one for collapsed view and one for tabs.

    i cutted images according to dp to pixel sizes with high resolution drawable xxxhdpi and put into drawable folder so it will adjustable to all screen sizes

    i have 2000x1246 image

    top image 256dp= 2000x1024 pixel

    bottom tab image 56dp= 2000x224 pixel

    Here is the complete example with source code

    0 讨论(0)
  • 2021-02-02 13:22

    i have achieved this i will put my code with the library used firstly this is the layout file

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/attraction_lay"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f5f6f5">
    
    <RelativeLayout
        android:id="@+id/bar"
        android:layout_width="match_parent"
        android:layout_height="47dp">
    
        <TextView
            android:id="@+id/exp_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="16dp"
            android:text="See &amp; do"
            android:textColor="#1b7bba"
            android:textSize="17sp" />
    
        <RelativeLayout
            android:id="@+id/relmenu"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true">
    
            <ImageView
                android:layout_width="17dp"
                android:layout_height="14dp"
                android:layout_alignParentBottom="true"
                android:layout_alignParentLeft="true"
                android:layout_marginBottom="17dp"
                android:layout_marginLeft="8dp"
                android:src="@drawable/menu_icon_blue" />
    
        </RelativeLayout>
    
        <RelativeLayout
            android:id="@+id/relsearch"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true">
    
            <ImageView
                android:layout_width="18dp"
                android:layout_height="18dp"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:layout_marginBottom="17dp"
    
                android:layout_marginRight="8dp"
                android:src="@drawable/search_icon_blue" />
    
        </RelativeLayout>
    
    </RelativeLayout>
    
    <View
        android:id="@+id/div"
        android:layout_width="match_parent"
        android:layout_height="2px"
        android:layout_below="@+id/bar"
        android:background="#1b7bba" />
    
    <FrameLayout
        android:id="@+id/layout_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    
        android:layout_below="@+id/div">
    
        <ListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:divider="@null"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:listSelector="@android:color/transparent"
            android:scrollbars="none" />
    
        <FrameLayout
            android:id="@+id/header"
            android:layout_width="match_parent"
            android:layout_height="290dp"
            android:layout_marginTop="0dp"
            android:orientation="vertical">
    
            <FrameLayout
                android:id="@+id/images_header"
                android:layout_width="fill_parent"
                android:layout_height="250dp"
                android:layout_marginBottom="40dp">
    
                <android.support.v4.view.ViewPager
                    android:id="@+id/gallery"
                    android:layout_width="fill_parent"
                    android:layout_height="250dp"
                    android:clickable="true"
                    android:focusable="false"
                    android:focusableInTouchMode="false"
                    android:overScrollMode="never" />
    
                <RelativeLayout
                    android:id="@+id/gallery_back"
    
                    android:layout_width="40dp"
                    android:layout_height="60dp"
                    android:layout_gravity="left|center_vertical">
    
                    <ImageView
                        android:layout_width="20dp"
                        android:layout_height="52dp"
                        android:layout_alignParentLeft="true"
                        android:layout_centerVertical="true"
                        android:background="@drawable/arrow_back" />
                </RelativeLayout>
    
                <RelativeLayout
                    android:id="@+id/gallery_next"
                    android:layout_width="40dp"
                    android:layout_height="60dp"
                    android:layout_gravity="right|center_vertical">
    
                    <ImageView
    
                        android:layout_width="20dp"
                        android:layout_height="52dp"
                        android:layout_alignParentRight="true"
                        android:layout_centerVertical="true"
                        android:background="@drawable/arrow_next" />
                </RelativeLayout>
    
                <View
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginBottom="-150dp"
                    android:layout_marginTop="170dp"
                    android:background="@drawable/horizontal_gradient" />
    
                <TextView
                    android:id="@+id/pagenum"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="right|bottom"
                    android:layout_marginBottom="10dp"
                    android:layout_marginRight="10dp"
                    android:text="3/15"
                    android:textColor="#FFF"
                    android:textSize="14sp" />
    
            </FrameLayout>
    
            <FrameLayout
                android:id="@+id/header_text_layout"
                android:layout_width="match_parent"
    
                android:layout_height="@dimen/min_height_textheader_materiallike"
                android:layout_gravity="bottom"
                android:background="#FFF">
    
                <!--<TextView-->
                <!--android:id="@+id/text_header"-->
                <!--android:layout_width="match_parent"-->
                <!--android:layout_height="wrap_content"-->
                <!--android:layout_gravity="center_vertical"-->
                <!--android:layout_marginLeft="70dp"-->
                <!--android:text="ttttt"-->
                <!--android:textColor="@android:color/white"-->
                <!--android:textSize="18sp"-->
    
                <!--android:textStyle="bold" />-->
                <RelativeLayout
                    android:id="@+id/button_header"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
    
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_centerHorizontal="true"
                        android:layout_centerVertical="true"
                        android:layout_marginLeft="83dp"
                        android:layout_marginRight="83dp">
    
                        <RelativeLayout
                            android:id="@+id/photo"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_gravity="center"
                            android:layout_weight="2.5">
    
                            <ImageView
                                android:layout_width="17dp"
                                android:layout_height="14dp"
                                android:layout_centerInParent="true"
                                android:background="@drawable/photo_blue_icon"
    
                                />
                        </RelativeLayout>
    
                        <RelativeLayout
                            android:id="@+id/video"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_weight="2.5">
    
                            <ImageView
                                android:layout_width="14dp"
                                android:layout_height="16dp"
                                android:layout_centerInParent="true"
                                android:background="@drawable/video_blue_icon" />
                        </RelativeLayout>
    
                        <RelativeLayout
                            android:id="@+id/share"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_weight="2.5">
    
                            <ImageView
                                android:layout_width="15dp"
                                android:layout_height="20dp"
                                android:layout_centerInParent="true"
                                android:background="@drawable/share_blue_icon" />
                        </RelativeLayout>
    
                        <RelativeLayout
                            android:id="@+id/fav"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_weight="2.5">
    
                            <ImageView
                                android:layout_width="20dp"
                                android:layout_height="19dp"
                                android:layout_centerInParent="true"
                                android:background="@drawable/fav_blue_icon" />
                        </RelativeLayout>
    
                    </LinearLayout>
    
                    <View
                        android:layout_width="match_parent"
                        android:layout_height="2px"
                        android:layout_alignParentBottom="true"
                        android:background="#d7d7d7" />
                </RelativeLayout>
            </FrameLayout>
    
        </FrameLayout>
    
    </FrameLayout>
    

    and in the java code you should add this

      StikkyHeaderBuilder.ListViewBuilder.stickTo(mListView)
                    .setHeader(R.id.header, (ViewGroup) contentView)
                    .minHeightHeaderDim(R.dimen.min_height_textheader_materiallike)
                    .animator(new ParallaxStikkyAnimator())
                    .attatch_Acitivty(Attractions.this)
                    .castTo("Attractions")
                    .build();
    

    and here is the library used

    but i have modified this library to work as i want

    the modification is add method in stcikylistview builder to know the activity used and pass a delegate for scrolling i used this because i added a blur for images in the viewpager

    and her is my modification

    i will upload the modified version of the library here you are https://drive.google.com/file/d/0BxdN8PyW5nmHMmFFeFY2aW9zdlk/view?usp=sharing

    0 讨论(0)
提交回复
热议问题