我是用的一个很有名气的依赖库,当然这个依赖库不是我写的,但是那个依赖库,实现起来真的好麻烦啊,我写了一个主
页,你让我导入了十多个类,和将近十个布局,还有其他依赖包,但是不知道访问量怎么会那么多。废话不多说,看下我写
的,简便不简便你说了算。
这个功能当滑到顶部的时候,标题栏置顶,当标题栏置顶,下部列表滑倒第一条目的时候,标题栏才会跟着下来
首先现导入Moudle一个依赖包:
implementation 'com.github.cpoopc:scrollablelayoutlib:1.0.1'
下面是xml布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/mCoordina"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<com.cpoopc.scrollablelayoutlib.ScrollableLayout
android:id="@+id/scrollbarlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/mImg_headimg"
android:layout_width="match_parent"
android:layout_height="318dp"
android:layout_alignParentTop="true"
android:layout_marginTop="-100dp"
android:scaleType="fitXY"
android:src="@mipmap/ic_launcher" />
<android.support.design.widget.TabLayout
android:id="@+id/tablayout"
android:layout_width="match_parent"
android:layout_height="36dp"
app:tabMaxWidth="0dp"
app:tabGravity="fill"
app:tabMode="fixed"
/>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
></android.support.v4.view.ViewPager>
</com.cpoopc.scrollablelayoutlib.ScrollableLayout>
</android.support.design.widget.CoordinatorLayout>
下面属于我的主运行类,你换成Acitivty即可
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.AppCompatSeekBar;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.cpoopc.scrollablelayoutlib.ScrollableLayout;
import com.gcssloop.widget.RCRelativeLayout;
import com.lhss.mw.myapplication.R;
import com.lhss.mw.myapplication.mvp.base.MyBaseFragment;
import com.lhss.mw.myapplication.mvp.base.MyEmptyActivity;
import com.lhss.mw.myapplication.mvp.collection.MyCollectionsActivity;
import com.lhss.mw.myapplication.net.MyCallBack;
import com.lhss.mw.myapplication.net.MyNetClient;
import com.lhss.mw.myapplication.reponse.IndexUserBean;
import com.lhss.mw.myapplication.ui.Mime.MinePage.Activity.AttentionActivity;
import com.lhss.mw.myapplication.ui.Mime.MinePage.Activity.CommentActivity;
import com.lhss.mw.myapplication.ui.Mime.MinePage.Activity.DynamicActivity;
import com.lhss.mw.myapplication.ui.Mime.MinePage.Activity.FansActivity;
import com.lhss.mw.myapplication.ui.Mime.MinePage.Activity.NormalWebActivity;
import com.lhss.mw.myapplication.ui.Mime.MinePage.Activity.PostActivityNew;
import com.lhss.mw.myapplication.ui.Mime.MinePage.Activity.UserfeedbackActivity;
import com.lhss.mw.myapplication.ui.Mime.MinePage.Adapter.PersionImgAdapter;
import com.lhss.mw.myapplication.ui.Mime.SettingPage.Activity.SettingActivity;
import com.lhss.mw.myapplication.ui.Mime.test.Activity_Test;
import com.lhss.mw.myapplication.ui.Mime.test.Fragment_Achievement;
import com.lhss.mw.myapplication.ui.Mime.test.Fragment_Coment;
import com.lhss.mw.myapplication.ui.Mime.test.Fragment_Discuss;
import com.lhss.mw.myapplication.ui.Mime.test.Fragment_Dynamic;
import com.lhss.mw.myapplication.ui.Mime.test.ScrollAbleFragment;
import com.lhss.mw.myapplication.utils.ActTo;
import com.lhss.mw.myapplication.utils.ImgUtils;
import com.lhss.mw.myapplication.utils.JsonUtils;
import com.lhss.mw.myapplication.utils.ToastUtils;
import com.lhss.mw.myapplication.view.MyScrollView;
import com.lhss.mw.myapplication.widget.PullScrollow.PullScrollView;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
/**
* Created by fei on 2017/10/10 16:09
*/
public class MineFragmentNew extends MyBaseFragment implements PullScrollView.OnTurnListener, MyScrollView.OnHeaderRefreshListener {
private static final String TAG="MineFragmentNew";
private TabLayout tabLayout;
private ViewPager viewPager;
private ArrayList<ScrollAbleFragment> fragmentList = new ArrayList<>();
private List<String> titleList = new ArrayList<>();
private ScrollableLayout scrollableLayout;
private MyAdapter adapter;
private TextView mTv_Title;
public static MineFragmentNew newInstance() {
MineFragmentNew fragment = new MineFragmentNew();
Log.e(TAG,"newInstance");
return fragment;
}
@Override
protected View initView() {
View view = View.inflate(ctx, R.layout.activity_test, null);
//实例化
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
tabLayout = (TabLayout) view.findViewById(R.id.tablayout);
scrollableLayout=view.findViewById(R.id.scrollbarlayout);
initList();
Log.e(TAG,"initView");
return view;
}
private void initList() {
Log.e(TAG,"我是initList");
fragmentList.add(Fragment_Dynamic.newInstance());
fragmentList.add(Fragment_Achievement.newInstance());
fragmentList.add(Fragment_Discuss.newInstance());
fragmentList.add(Fragment_Coment.newInstance());
if(titleList.size==0){
titleList.add("成就");
titleList.add("动态");
titleList.add("讨论");
titleList.add("评价");
}
adapter = new MyAdapter(getChildFragmentManager(), getActivity(), titleList, fragmentList);
viewPager.setAdapter(adapter);
scrollableLayout.getHelper().setCurrentScrollableContainer(fragmentList.get(0));
//绑定
tabLayout.setupWithViewPager(viewPager);
tabLayout.setTabMode(TabLayout.MODE_FIXED);
setIndicator(tabLayout,23,23);
//设置默认颜色和选中颜色
tabLayout.setTabTextColors(Color.BLACK,getResources().getColor(R.color.gold));
//设置下滑线颜色
tabLayout.setSelectedTabIndicatorColor(getResources().getColor(R.color.gold));
for (int i=0;i<tabLayout.getTabCount();i++){
TabLayout.Tab tabAt = tabLayout.getTabAt(i);
tabAt.setCustomView(adapter.getTabView(i));
}
}
@Override
protected void initData() {
}
//设置分割线距离
public void setIndicator(TabLayout tabs, int leftDip, int rightDip) {
Class<?> tabLayout = tabs.getClass();
Field tabStrip = null;
try {
tabStrip = tabLayout.getDeclaredField("mTabStrip");
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
tabStrip.setAccessible(true);
LinearLayout llTab = null;
try {
llTab = (LinearLayout) tabStrip.get(tabs);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
int left = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, leftDip, Resources.getSystem().getDisplayMetrics());
int right = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, rightDip, Resources.getSystem().getDisplayMetrics());
for (int i = 0; i < llTab.getChildCount(); i++) {
View child = llTab.getChildAt(i);
child.setPadding(0, 0, 0, 0);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1);
params.leftMargin = left;
params.rightMargin = right;
child.setLayoutParams(params);
child.invalidate();
}
}
//设置frament适配器
class MyAdapter extends FragmentPagerAdapter {
private Context context;
List<String> titles;
ArrayList<ScrollAbleFragment> fragments=new ArrayList<>();
public MyAdapter(FragmentManager fm, Context context, List<String> titles, ArrayList<ScrollAbleFragment> fragments) {
super(fm);
this.context = context;
this.titles = titles;
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
//return Fragment_My.newInstance(titles.get(position));
return fragments.get(position);
}
@Override
public int getCount() {
return titles.size();
}
/**
* 自定义方法,提供自定义Tab
* <p>
* position 位置
* return返回Tab的View
*/
public View getTabView(int position) {
View v = LayoutInflater.from(context).inflate(R.layout.tab_custom, null);
mTv_Title = (TextView) v.findViewById(R.id.mTv_Title);
mTv_Title.setText(titles.get(position));
//添加一行,设置颜色
mTv_Title.setTextColor(tabLayout.getTabTextColors());
return v;
}
}
@Override
protected void bindEvent() {
}
@Override
public void onHeaderRefresh(MyScrollView view) {
}
@Override
public void onTurn() {
}
}
下面就添加一个Frgment,其他的都给它一样
package com.lhss.mw.myapplication.ui.Mime.test;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.cpoopc.scrollablelayoutlib.ScrollableHelper;
import com.lhss.mw.myapplication.R;
import java.util.ArrayList;
import java.util.List;
public class Fragment_Dynamic extends ScrollAbleFragment implements ScrollableHelper.ScrollableContainer{
private View view;
private ListView mListview;
ArrayAdapter adapter = null;
private List<String> list=new ArrayList<>();
private int articleTypeId = 0;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_dynamic, null);
initView(view);
initList();
return view;
}
private void initList() {
for (int i=0;i<50;i++){
list.add("我是第="+i+"条数据");
}
}
private void initView(View view) {
mListview=view.findViewById(R.id.mListView);
adapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,list);
mListview.setAdapter(adapter);
mListview.setVerticalScrollBarEnabled(true);
}
private static String TITLE = "title";
private static String ARTICLETYPEID = "articleTypeId";
public static Fragment_Dynamic newInstance() {
Fragment_Dynamic listFragment = new Fragment_Dynamic();
return listFragment;
}
@Override
public View getScrollableView() {
return mListview;
}
}