下拉刷新swipetoloadlayout的用法,以及自定义头部

《20160930—————————–更新内容

回过头看自己以前写的这个博客非常多的废话 和效果并不适合大家去使用这个好用的控件 现在整理删掉了自己写的效果, 写了个最简单的实例给一起学习的新手,并附送最精简写法的demo 直接给大家最想要的东西,下面的废话 没空就不用看了哈

核心是可以包裹任意view刷新。不需要原view能滚动,比谷歌自带的范围更广一些

先看效果
这里写图片描述

下载实例

相关Demo module免费下载

JAVA

package com.rex;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import com.aspsine.swipetoloadlayout.OnLoadMoreListener;
import com.aspsine.swipetoloadlayout.OnRefreshListener;
import com.aspsine.swipetoloadlayout.SwipeToLoadLayout;

/**
 * 用于swipetoloadlayout的demo演示
 */
public class MainActivity extends AppCompatActivity {

    private SwipeToLoadLayout swipeToLoadLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        swipeToLoadLayout = (SwipeToLoadLayout) findViewById(R.id.swipeToLoadLayout);
        HeaderView swipe_refresh_header = (HeaderView) findViewById(R.id.swipe_refresh_header);
        FooterView swipe_load_more_footer = (FooterView) findViewById(R.id.swipe_load_more_footer);

        swipeToLoadLayout.setRefreshHeaderView(swipe_refresh_header);
        swipeToLoadLayout.setLoadMoreFooterView(swipe_load_more_footer);
        //添加过渡滑动 其他设置 自己根据英文尝试吧
        swipeToLoadLayout.setRefreshCompleteDelayDuration(2000);


        swipeToLoadLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh() {
                Toast.makeText(MainActivity.this, "OnRefreshListener!", Toast.LENGTH_SHORT);
                swipeToLoadLayout.setRefreshing(false);//收头
            }
        });
        swipeToLoadLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                Toast.makeText(MainActivity.this, "OnLoadMoreListener!", Toast.LENGTH_SHORT);
                swipeToLoadLayout.setLoadingMore(false);
            }
        });
    }
}
package com.rex;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.aspsine.swipetoloadlayout.SwipeRefreshTrigger;
import com.aspsine.swipetoloadlayout.SwipeTrigger;

/**
 * Created by  Rex on 2016/9/30.
 * 是不是LinearLayout都无所谓 你可以用你喜欢的形式
 */
public class HeaderView extends LinearLayout implements SwipeRefreshTrigger, SwipeTrigger {

    private TextView tvStatus;

    public HeaderView(Context context) {
        this(context, null, 0);
    }


    public HeaderView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public HeaderView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }


    private void init() {
        //这个view随意定义

        //这里的原理就是简单的动态布局添加
        ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        View view = View.inflate(getContext(), R.layout.header, null);
        addView(view, lp);


        tvStatus = (TextView) view.findViewById(R.id.tvTest);
    }

    @Override
    public void onRefresh() {
        tvStatus.setText("onRefresh");
    }

    @Override
    public void onPrepare() {
        tvStatus.setText("onPrepare");
    }

    @Override
    public void onSwipe(int i, boolean b) {
        tvStatus.setText("onSwipe" + i);
    }

    @Override
    public void onRelease() {
        tvStatus.setText("onRelease");
    }

    @Override
    public void complete() {
        tvStatus.setText("complete");
    }

    @Override
    public void onReset() {
        tvStatus.setText("测试测试");
    }


}

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.rex.MainActivity">

    <com.aspsine.swipetoloadlayout.SwipeToLoadLayout
        android:id="@+id/swipeToLoadLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

        <com.rex.HeaderView
            android:id="@+id/swipe_refresh_header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

        <TextView
            android:id="@+id/swipe_target"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#c3c9"
            android:gravity="center"
            android:text="包裹想被刷新的任意View"/>

        <com.rex.FooterView
            android:id="@+id/swipe_load_more_footer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>


    </com.aspsine.swipetoloadlayout.SwipeToLoadLayout>
</RelativeLayout>

20160930—————————–更新内容》

//旧博客

开始鼠标两次点到标题栏了。哈哈 刷新本身还是非常流畅的
这里写图片描述

引言:

从开发到现在肯定是想弄一套适合自己的刷新的控件,最开始一直用的pulltorefresh,不过 不知道是我使用问题还是本身有问题,刷新过快就会卡主等一些小bug,然后是每个控件都是自定义的。渐渐的想用写的样式了。由于自己水平很low写出来的也很low所以还是想着用框架。
然后转Android studio后接触到了Google自带的SwipeRefreshLayout,包裹需要刷新的view 刷新样式也很新颖。但样式局限,子布局还一定得自身是可以滑动的布局,还没提供上拉加载的效果,SwipeRefreshLayout居然和自家RecyclerView冲突。
但是这种包裹需要刷新的view实在是不错的设定,所以我就在找有没有带着这个优点,又还有其他特色如自定义头尾部很方便的。

    终于我找到了[swipetoloadlayout](https://github.com/Aspsine/SwipeToLoadLayout)
他以下三哥们为基础   

Google SwipeRefreshLayout
liaohuqiu android-Ultra-Pull-To-Refresh
Yalantis Phoenix
所以有SwipeRefreshLayout喜欢的部分。

1.支持上下拉,头部和尾部也都是用接口实现可塑造性高,多种流行下拉方式
2.包裹其他需要刷新的View即可
3.设定了一下刷完完成自定义 释放后的缓缓滑动 更加流畅

说了半天废话我还是来讲我摸索到的用法。
为什么要说摸索,因为我一开始都不知道怎么把头部收回去…一般是complete啊 finish什么的。结果我试了半天。

直接说我搜出来加摸索的具体详尽用法了。

1、如何集成

注意 都是写在你module的gradle 里面
Step 1. Add the JitPack repository in your build.gradle at the end of repositories:

repositories {
maven { url “https://jitpack.io” }
}
Step 2. Add the dependency in the form

dependencies {
compile ‘com.github.Aspsine:SwipeToLoadLayout:v1.0.0’
}
SwipeToLoadLayout往后更新了两个版本,你们也可以用新的。
这个版本就是你sdk要更新到23,不然会缺省一些主题等value的值

2.开始自定义刷新效果

swipeToLoadLayout提供了一套接口,刷新的头部自定义一个View实现SwipeTrigger和SwipeRefreshTrigger就行了,刷新的尾部自定义一个View实现SwipeLoadMoreTrigger和SwipeTrigger,头部实现代码:

我搜到的是一个Textview作为头部 所以远远不能满足我要的自定义。
所以这里给上我的自定义头部,因为设计到一些效果。大家可以理解了换成一些简单的控件即可

也就是说LinearLayout你可以换成任何View 成为你的头布局。

3.具体用法

按如下固定写法3个id固定即可。第一个id不需要是固定的。但写成了固定方便初始化 见2中方法initSwipe

注意,swipetoloadlayout中布局包裹的View id是指定的,不能乱改,否则找不到
Add a comment to this line
swipe_target” type=”id” 刷新目标
swipe_refresh_header” type=”id” 刷新头部
swipe_load_more_footer” type=”id” 刷新尾部

3.1首先 xml文件中`


3.2 Java代码中

“`

第一次写博客 比较啰嗦,但这刷新控件确实不错,建议大家先改成简单的头布局试一下,大家可以看此链接SwipeToLoadLayout–小白也能轻松定制自己的刷新效果,我也是看到了这个,才开始去使用,如果想着自定义稍微复杂的控件和使用可以跟我探讨更好的方法。

脚布局也是一个逻辑哦。认真看的说明是绝对可以写出自己对应的。需要的demo的留言我以后传。
我这里面加了几个自定义控件。大家可以用一个简单的textview试试。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值