Day12:Banner_pulltorefresh_flycoTablayout

一.Banner实现轮播图:

github官网:https://github.com/youth5201314/banner

1.思路:

1.依赖: implementation ‘com.youth.banner:banner:1.4.10’ //轮播图
2.布局:

 <com.youth.banner.Banner
        android:id="@+id/banner"
        android:layout_width="match_parent"
        android:layout_height="200dp"></com.youth.banner.Banner>

3.java代码:

Banner banner = (Banner) findViewById(R.id.banner);
    //设置banner样式
    banner.setBannerStyle(BannerConfig.NUM_INDICATOR_TITLE);//数字加标题
    //设置图片加载器
    banner.setImageLoader(new GlideImageLoader());
    //设置图片集合
    banner.setImages(images);
    //设置标题集合(当banner样式有显示title时)
    banner.setBannerTitles(titles);
    //设置自动轮播,默认为true
    banner.isAutoPlay(true);
    //设置轮播时间
    banner.setDelayTime(1500);
    //banner设置方法全部调用完毕时最后调用
    banner.start();

2.所有代码:网络请求json数据加载banner


public class BannerActivity extends AppCompatActivity {

    Banner banner;
    ArrayList<String> list=new ArrayList<>();//图片集合
    ArrayList<String> list_title=new ArrayList<>();//标题集合

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_banner);
        banner=findViewById(R.id.banner);
        //网络请求
        load();
    }

    private void load() {
        OkGo.<String>get("http://vueshop.glbuys.com/api/home/index/slide?token=1ec949a15fb709370f").execute(new StringCallback() {
            @Override
            public void onSuccess(Response<String> response) {
                String body = response.body();
                Gson gson = new Gson();
                Bean bean = gson.fromJson(body, Bean.class);
                List<Bean.DataBean> data = bean.getData();
                for(int i=0;i<data.size();i++){
                    list.add("http:"+data.get(i).getImage());
                    list_title.add(data.get(i).getTitle());
                }
                //设置样式
		        banner.setBannerStyle(BannerConfig.NUM_INDICATOR_TITLE);//数字加标题
		        //设置图片加载器
		        banner.setImageLoader(new ImageLoaderInterface() {
		            //显示图片
		            @Override
		            public void displayImage(Context context, Object path, View imageView) {
		                //path 集合中的图片   imageView 控件
		                Glide.with(context).load(path).into((ImageView) imageView);
		            }
		            //创建imageview
		            @Override
		            public View createImageView(Context context) {
		                return new ImageView(context);
		            }
		        });
		        //设置自动轮播事件
		        banner.setDelayTime(1000);//每隔1秒自动走一次
                //设置图片的集合
                banner.setImages(list);
                //设置标题的集合
                banner.setBannerTitles(list_title);
                banner.start();
            }
        });
    }
}

在这里插入图片描述
在这里插入图片描述

二.FlycoTablayout:

在这里插入图片描述

1.思路:

(1)添加依赖:
(2)设置tab底部的样式:commonTabLayout.setTabData(集合);
(3)点击底部实现切换: commonTabLayout.setOnTabSelectListener(监听对象);
(4)显示未读消息
commonTabLayout.showDot(tab的下标);//小红点
commonTabLayout.showMsg(tab的下标,消息个数);//设置消息个数
(5)隐藏消息:
commonTabLayout.hideMsg(tab的下标);

2.代码:

(1)xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".tablayout.QQTabActivity"
    android:orientation="vertical">
    <FrameLayout
        android:id="@+id/fragme_layout"
        android:layout_weight="8"
        android:layout_width="match_parent"
        android:layout_height="0dp"></FrameLayout>
    <com.flyco.tablayout.CommonTabLayout
        app:tl_textSelectColor="#8BC34A"
        app:tl_textUnselectColor="#000"
        android:id="@+id/tab"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"></com.flyco.tablayout.CommonTabLayout>

</LinearLayout>

(2)java代码

public class QQTabActivity extends AppCompatActivity{
    CommonTabLayout commonTabLayout;
    ArrayList<CustomTabEntity> tabEntitys=new ArrayList<>();
    Fragment fragment1,fragment2,fragment3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_qqtab);
        commonTabLayout=findViewById(R.id.tab);
        fragment1=new Fragment1();
        fragment2=new Fragment2();
        fragment3=new Fragment3();
        //TODO 1:设置tablayout的样式
        tabEntitys.add(new MyTab("消息",R.mipmap.select1,R.mipmap.select2));
        tabEntitys.add(new MyTab("我的",R.mipmap.select1,R.mipmap.select2));
        tabEntitys.add(new MyTab("你的",R.mipmap.select1,R.mipmap.select2));
        commonTabLayout.setTabData(tabEntitys);

        //TODO 2:设置点击事件
        commonTabLayout.setOnTabSelectListener(new OnTabSelectListener() {
            @Override
            public void onTabSelect(int position) {//选中
                if(position==0){
                    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.fragme_layout,fragment1)
                            .commit();
                }else if(position==1){
                    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.fragme_layout,fragment2)
                            .commit();
                    //消失
                    commonTabLayout.hideMsg(1);
                }else if(position==2){
                    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.fragme_layout,fragment3)
                            .commit();
                    commonTabLayout.hideMsg(2);
                }

            }

            @Override
            public void onTabReselect(int position) {//再一次选中

            }
        });
        //TODO 3:显示未读消息
        commonTabLayout.showDot(1);//小红点
        commonTabLayout.showMsg(2,400);//设置消息个数
    }
}

3.其他样式和属性:

在这里插入图片描述
在这里插入图片描述

三.pulltorefrshLayout完成上拉和下拉

1.导入pulltorefresh library

在这里插入图片描述

2.项目中引用pulltorefresh

3.xml布局

注意:PullToRefreshLayout里面只能包含一个控件

    <com.jwenfeng.library.pulltorefresh.PullToRefreshLayout
        android:id="@+id/pull"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></androidx.recyclerview.widget.RecyclerView>
</com.jwenfeng.library.pulltorefresh.PullToRefreshLayout>

4.java代码

            pullToRefreshLayout.setRefreshListener(new BaseRefreshListener() {
            @Override
            public void refresh() {//刷新
                Toast.makeText(MainActivity.this, "刷新", Toast.LENGTH_SHORT).show();
                pullToRefreshLayout.finishRefresh();
            }
            @Override
            public void loadMore() {//加载
                Toast.makeText(MainActivity.this, "加载", Toast.LENGTH_SHORT).show();
                pullToRefreshLayout.finishLoadMore();

            }
        });

四.SmartRefreshLayout完成上拉和下拉

1.依赖:

    implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'  //1.0.5及以前版本的老用户升级需谨慎,API改动过大
    implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0'  //没有使用特殊Header,可以不加这行

2.代码:

(1)xml布局

MainActivity布局:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <com.scwang.smartrefresh.layout.SmartRefreshLayout
        android:id="@+id/smart"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/good_rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </android.support.v7.widget.RecyclerView>
    </com.scwang.smartrefresh.layout.SmartRefreshLayout>

</LinearLayout>

注意:PullToRefreshLayout里面只能放一个控件

(2)java代码:


   		smartRefreshLayout=findViewById(R.id.smart);
        smartRefreshLayout.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener(){

            @Override
            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                Toast.makeText(MainActivity.this, "111", Toast.LENGTH_SHORT).show();
                smartRefreshLayout.finishRefresh();
            }

            @Override
            public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
                Toast.makeText(MainActivity.this, "222", Toast.LENGTH_SHORT).show();
                smartRefreshLayout.finishLoadMore();

            }
        });
        //设置样式
        smartRefreshLayout.setRefreshHeader(new TaurusHeader(getActivity()));

3.其他属性

RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        refreshLayout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);
        refreshLayout.setDragRate(0.5f);//显示下拉高度/手指真实下拉高度=阻尼效果
        refreshLayout.setReboundDuration(300);//回弹动画时长(毫秒)

        refreshLayout.setHeaderHeight(100);//Header标准高度(显示下拉高度>=标准高度 触发刷新)
        refreshLayout.setHeaderHeightPx(100);//同上-像素为单位 (V1.1.0删除)
        refreshLayout.setFooterHeight(100);//Footer标准高度(显示上拉高度>=标准高度 触发加载)
        refreshLayout.setFooterHeightPx(100);//同上-像素为单位 (V1.1.0删除)

        refreshLayout.setFooterHeaderInsetStart(0);//设置 Header 起始位置偏移量 1.0.5
        refreshLayout.setFooterHeaderInsetStartPx(0);//同上-像素为单位 1.0.5 (V1.1.0删除)
        refreshLayout.setFooterFooterInsetStart(0);//设置 Footer 起始位置偏移量 1.0.5
        refreshLayout.setFooterFooterInsetStartPx(0);//同上-像素为单位 1.0.5 (V1.1.0删除)

        refreshLayout.setHeaderMaxDragRate(2);//最大显示下拉高度/Header标准高度
        refreshLayout.setFooterMaxDragRate(2);//最大显示下拉高度/Footer标准高度
        refreshLayout.setHeaderTriggerRate(1);//触发刷新距离 与 HeaderHeight 的比率1.0.4
        refreshLayout.setFooterTriggerRate(1);//触发加载距离 与 FooterHeight 的比率1.0.4

        refreshLayout.setEnableRefresh(true);//是否启用下拉刷新功能
        refreshLayout.setEnableLoadMore(false);//是否启用上拉加载功能
        refreshLayout.setEnableAutoLoadMore(true);//是否启用列表惯性滑动到底部时自动加载更多
        refreshLayout.setEnablePureScrollMode(false);//是否启用纯滚动模式
        refreshLayout.setEnableNestedScroll(false);//是否启用嵌套滚动
        refreshLayout.setEnableOverScrollBounce(true);//是否启用越界回弹
        refreshLayout.setEnableScrollContentWhenLoaded(true);//是否在加载完成时滚动列表显示新的内容
        refreshLayout.setEnableHeaderTranslationContent(true);//是否下拉Header的时候向下平移列表或者内容
        refreshLayout.setEnableFooterTranslationContent(true);//是否上拉Footer的时候向上平移列表或者内容
        refreshLayout.setEnableLoadMoreWhenContentNotFull(true);//是否在列表不满一页时候开启上拉加载功能
        refreshLayout.setEnableFooterFollowWhenLoadFinished(false);//是否在全部加载结束之后Footer跟随内容1.0.4
        refreshLayout.setEnableOverScrollDrag(false);//是否启用越界拖动(仿苹果效果)1.0.4

        refreshLayout.setEnableScrollContentWhenRefreshed(true);//是否在刷新完成时滚动列表显示新的内容 1.0.5
        refreshLayout.srlEnableClipHeaderWhenFixedBehind(true);//是否剪裁Header当时样式为FixedBehind时1.0.5
        refreshLayout.srlEnableClipFooterWhenFixedBehind(true);//是否剪裁Footer当时样式为FixedBehind时1.0.5

        refreshLayout.setDisableContentWhenRefresh(false);//是否在刷新的时候禁止列表的操作
        refreshLayout.setDisableContentWhenLoading(false);//是否在加载的时候禁止列表的操作

        refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener());//设置多功能监听器
        refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDecider());//设置滚动边界判断
        refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDeciderAdapter());//自定义滚动边界

        refreshLayout.setRefreshHeader(new ClassicsHeader(context));//设置Header
        refreshLayout.setRefreshFooter(new ClassicsFooter(context));//设置Footer
        refreshLayout.setRefreshContent(new View(context));//设置刷新Content(用于非xml布局代替addView)1.0.4

        refreshLayout.autoRefresh();//自动刷新
        refreshLayout.autoLoadMore();//自动加载
        refreshLayout.autoRefreshAnimationOnly();//自动刷新,只显示动画不执行刷新
        refreshLayout.autoLoadMoreAnimationOnly();//自动加载,只显示动画不执行加载
        refreshLayout.autoRefresh(400);//延迟400毫秒后自动刷新
        refreshLayout.autoLoadMore(400);//延迟400毫秒后自动加载
        refreshLayout.finishRefresh();//结束刷新
        refreshLayout.finishLoadMore();//结束加载
        refreshLayout.finishRefresh(3000);//延迟3000毫秒后结束刷新
        refreshLayout.finishLoadMore(3000);//延迟3000毫秒后结束加载
        refreshLayout.finishRefresh(false);//结束刷新(刷新失败)
        refreshLayout.finishLoadMore(false);//结束加载(加载失败)
        refreshLayout.finishLoadMoreWithNoMoreData();//完成加载并标记没有更多数据 1.0.4
        refreshLayout.closeHeaderOrFooter();//关闭正在打开状态的 Header 或者 Footer(1.1.0)
        refreshLayout.resetNoMoreData();//恢复没有更多数据的原始状态 1.0.4(1.1.0删除)
        refreshLayout.setNoMoreData(false);//恢复没有更多数据的原始状态 1.0.5
        

练习手册

题目一

整体要求:所有的数据都是网络请求的数据+okhttp进行封装
1.品牌fragment:
(1)上面实现横向滑动的recyclerview
(2)中间显示多布局的recyclerview
(3)导入pulltorefresh,实现上啦加载,下拉刷新,更多
在这里插入图片描述
2.供应fragment
(1)上面recyclerview实现横向滑动,网络请求数据
(2)中间recyclerview使用多布局添加头布局,头布局是轮播图
(3)导入pulltorefresh,实现上啦加载,下拉刷新,更多
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值