安卓开发之自定义下拉刷新头部

一直用的下拉刷新库就是android-Ultra-Pull-to-Refresh,本身这个库就带有几种样式的下拉刷新头部,大家可以去git看一下,地址https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh。最为方便的是我们可以自己定制各式各样的头部。最近项目有个自定义的下拉头部,自己研究了一下。实现效果是:

开发之自定义下拉刷新头部-安卓自定义下拉刷新">

我们要做的就是自己写一个样式xml文件,然后实现PtrUIHandler这个接口,代码如下:

public class LoadMoreFooterView extends FrameLayout implements PtrUIHandler {
    private LayoutInflater inflater;
 
    // 下拉刷新视图(头部视图)
    private ViewGroup headView;
 
    // 下拉刷新文字
    private TextView tvHeadTitle;
 
    // 下拉图标
    private ImageView ivWindmill;
 
  //  private WindmillDrawable drawable;
 
    public LoadMoreFooterView(Context context) {
        this(context, null);
    }
 
    public LoadMoreFooterView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
 
    public LoadMoreFooterView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }
 
    /**
     * 初始化
     *
     * @param context
     */
    private void init(Context context) {
 
        inflater = LayoutInflater.from(context);
        /**
         * 头部
         */
        headView = (ViewGroup) inflater.inflate(R.layout.widget_header, this, true);
        ivWindmill = (ImageView) headView.findViewById(R.id.iv_windmill);
        tvHeadTitle = (TextView) headView.findViewById(R.id.tv_head_title);
        ivWindmill.setVisibility(VISIBLE);
        ivWindmill.setImageResource(R.mipmap.icon_logo);
        tvHeadTitle.setText("下拉刷新");
 
    }
 
    @Override
    public void onUIReset(PtrFrameLayout ptrFrameLayout) {
        tvHeadTitle.setText("下拉刷新");
 
    }
 
    @Override
    public void onUIRefreshPrepare(PtrFrameLayout ptrFrameLayout) {
        tvHeadTitle.setText("下拉刷新");
    }
 
    @Override
    public void onUIRefreshBegin(PtrFrameLayout ptrFrameLayout) {
        tvHeadTitle.setText("正在刷新");
 
    }
 
    @Override
    public void onUIRefreshComplete(PtrFrameLayout ptrFrameLayout) {
        ivWindmill.clearAnimation();
        tvHeadTitle.setText("刷新完成");
    }
 
    @Override
    public void onUIPositionChange(PtrFrameLayout frame, boolean isUnderTouch, byte status, PtrIndicator ptrIndicator) {
        final int mOffsetToRefresh = frame.getOffsetToRefresh();
        final int currentPos = ptrIndicator.getCurrentPosY();
        final int lastPos = ptrIndicator.getLastPosY();
 
        if (currentPos < mOffsetToRefresh && lastPos >= mOffsetToRefresh) {
            if (isUnderTouch && status == PtrFrameLayout.PTR_STATUS_PREPARE) {
                tvHeadTitle.setText("下拉刷新");
            }
        } else if (currentPos > mOffsetToRefresh && lastPos <= mOffsetToRefresh) {
            if (isUnderTouch && status == PtrFrameLayout.PTR_STATUS_PREPARE) {
                tvHeadTitle.setText("松开刷新");
            }
        }
 
    }
 
}

使用:

 

/* 创建自定义刷新头部view */
LoadMoreFooterView header = new LoadMoreFooterView(this);
/* 设置刷新头部view */
ptr_view.setHeaderView(header);
/* 设置回调 */
ptr_view.addPtrUIHandler(header);
ptr_view.setPtrHandler(new PtrHandler() {
    @Override
    public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
        return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header);
    }
 
    @Override
    public void onRefreshBegin(PtrFrameLayout frame) {
        ptr_view.postDelayed(new Runnable() {
            @Override
            public void run() {
              
                getdata();
            }
        }, 2000);
    }
});
    /* 延时100秒,自动刷新 */
ptr_view.postDelayed(new Runnable() {
    @Override
    public void run() {
        ptr_view.autoRefresh();
    }
}, 100);

时间: 2024-08-02 22:13:45

安卓开发之自定义下拉刷新头部的相关文章

安卓开发-自定义下拉刷新和图片轮播放到同一个布局里

问题描述 自定义下拉刷新和图片轮播放到同一个布局里 自定义下拉刷新和图片轮播放到同一个布局view_header里,直接加载这个布局,可以加载出来么? 解决方案 不清楚,感觉不可以.

自定义上拉下拉-android gridview 加头部的自定义下拉刷新,(我做的头部下拉了,)上拉加载,有人有吗

问题描述 android gridview 加头部的自定义下拉刷新,(我做的头部下拉了,)上拉加载,有人有吗 这个只有头部下拉了,gridview没有跟着滑动. 解决方案 PullToRefreshGridView,你去找这个组件,直接用就行了 解决方案二: https://github.com/chrisbanes/Android-PullToRefresh 里面有gridview视图的,可参考,fragment里面一样用,比自己写起来强多了.

android自定义下拉刷新的头部

问题描述 android自定义下拉刷新的头部 用PullToRefresh的时候,自带的是一个"下拉刷新"提示,我想改一下这个文字,怎么弄啊 还有那个图标 解决方案 已解决 ILoadingLayout startLabels= listview.getLoadingLayoutProxy(); // startLabels.setPullLabel("下拉刷新...");// 刚下拉时,显示的提示 // startLabels.setRefreshingLabel

android gridview自定义下拉刷新,只有头部拉下来了

问题描述 android gridview自定义下拉刷新,只有头部拉下来了 解决方案 什么意思,表达清楚点 解决方案二: 实在不懂什么意思,请表达清楚点 解决方案三: 只有headview拉下来 然后没上去? 还是 没有刷新?

Android自定义组合控件之自定义下拉刷新和左滑删除实例代码_Android

绪论 最近项目里面用到了下拉刷新和左滑删除,网上找了找并没有可以用的,有比较好的左滑删除,但是并没有和下拉刷新上拉加载结合到一起,要不就是一些比较水的结合,并不能在项目里面使用,小编一着急自己组合了一个,做完了和QQ的对比了一下,并没有太大区别,今天分享给大家,其实并不难,但是不知道为什么网上没有比较好的Demo,当你的项目真的很急的时候,又没有比较好的Demo,那么"那条友谊的小船儿真是说翻就翻啊",好了,下面先来具体看一下实现后的效果吧:   代码已经上传到Github上了,小伙伴

Android仿百度外卖自定义下拉刷新效果_Android

现如今的APP各式各样,同样也带来了各种需求,一个下拉刷新都能玩出花样了,前两天订饭的时候不经意间看到了"百度外卖"的下拉刷新,今天的主题就是它–自定义下拉刷新动画. 看一下实现效果吧: 动画 我们先来看看Android中的动画吧: Android中的动画分为三种: Tween动画,这一类的动画提供了旋转.平移.缩放等效果. Alpha – 淡入淡出 Scale – 缩放效果 Roate – 旋转效果 Translate – 平移效果 Frame动画(帧动画),这一类动画可以创建一个D

Android仿百度外卖自定义下拉刷新效果

现如今的APP各式各样,同样也带来了各种需求,一个下拉刷新都能玩出花样了,前两天订饭的时候不经意间看到了"百度外卖"的下拉刷新,今天的主题就是它–自定义下拉刷新动画. 看一下实现效果吧: 动画 我们先来看看Android中的动画吧: Android中的动画分为三种: Tween动画,这一类的动画提供了旋转.平移.缩放等效果. Alpha – 淡入淡出 Scale – 缩放效果 Roate – 旋转效果 Translate – 平移效果 Frame动画(帧动画),这一类动画可以创建一个D

Android自定义下拉刷新上拉加载_Android

本文实例为大家分享了Android自定义下拉刷新上拉加载的具体实现步骤,供大家参考,具体内容如下 实现的方式是SwipeRefreshLayout + RecyclerView 的VIewType 首先看效果: 总的思路: 布局文件 <android.support.v4.widget.SwipeRefreshLayout android:layout_marginTop="?attr/actionBarSize" android:id="@+id/one_refres

Android自定义下拉刷新控件RefreshableView_Android

这是在了解下拉刷新功能原理下的产物,下拉刷新可以说是国产APP里面必有的功能,连Google都为此出了SwipeRefreshLayout,一种MD风格的下拉刷新. 不过,MD风格在国内似乎很是艰难,不单单是国内系统主流仍是4.4的原因,也有用户习惯的问题,扯的有点多了,在看了许多博客之后,我突然想写一个能仿照 SwipeRefreshLayout 的兼容所有控件的下拉刷新,不单单只是 ListView,希望它也可以包容普通的View和ScrollView,经过两天的奋斗,终于搞定了,因为我的目