仿IOS版QQ水滴下拉刷新,添加上拉加载、左滑删除

iOS版QQ的黏性下拉刷新效果简易实现 前言对于市面上用户群体较大的App来说,Android和iOS两个版本的某些部分的使用体验有些差异。这种现象的起因或归结于平台的操作系统本身的不同,也可以想成是充分利用平台本身提供的资源,打造符合其使用习惯的应用。为了和文题相关,这里就举例QQ来说明。Android版本的下拉刷新就是一个翻转的小箭头效果,而iOS版本的却是其平台本身很经典的牛皮糖(黏性)效果。考虑到Tencent在后来推出针对强迫症 阅读详情

转载请注明出处:
http://blog.youkuaiyun.com/guodongAndroid/article/details/51516451
本文来自:【孫小逗的博客】

1、概述

哈,对于我这样的菜鸟来说,看着大神们的博客总想啥子时候自己也能写博客啊。别说你不知道有哪些大神?好吧,比如,我一直关注的鸿神,还有让我买了第一本Android书籍的郭大侠。好了,就说这些吧。

效果如下:

2、整合

前面已经说了,像我这样学了不到1年Android的菜鸟哪会写这么高大上的控件啊。菜鸟就得站在巨人的肩膀上的飞啊。

言过正传,其实看到这个效果大家肯定不陌生,其实这是两个控件的结合体,哪两个控件呢。首先感谢两位作者!嘿嘿,悄悄的告诉你PullLayout和SwipeMenuListView,相信后面的控件大家都比较熟悉,Github上很火的ListView侧滑控件。

3、布局

首先在build.gradle中加入两个控件的依赖:

compile 'com.xiaosu:pullLayout:1.4.1'
compile 'com.baoyz.swipemenulistview:library:1.3.0'

接下来就是布局文件中使用了:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:sgd="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.xiaosu.pulllayout.PullLayout
        android:id="@+id/pulllayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        sgd:theme="@style/pull_style">

        <com.baoyz.swipemenulistview.SwipeMenuListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:dividerHeight="5dp"/>
    </com.xiaosu.pulllayout.PullLayout>
</LinearLayout>

首先我们在LinearLayout中声明了一个命名空间sgd,下面的PullLayout使用了自定义的属性sgd:theme,是一个style,
好的,我们看下这个style:

<style name="pull_style">
        <item name="waterDropColor">@color/colorPrimaryDark</item>
        <item name="indicatorArrowColor">@color/colorPrimaryDark</item>
        <item name="loadStartColor">#FFFFFFFF</item>
        <item name="loadEndColor">@color/colorAccent</item>
        <item name="android:textColor">@color/colorPrimaryDark</item>
        <item name="refreshArrowColor">@android:color/holo_red_light</item>
</style>

里面定义了一些属性,比如,水滴的颜色,水滴里面刷新图片的颜色等,这些我们都可以去定义。

好的,回到我们的布局文件,可以看到,我们的SwipeMenuListView被PullLayout所包裹。之前在Github上也看到类似的效果,地址为Android-PullToRefresh-SwipeMenuListView-Sample,这个效果是PullToRefresh和SwipeMenuListView整合体,对侧滑有时会有冲突,有兴趣的朋友可以去看看。

那么布局好了该怎么使用呢?

4、使用

使用也是很简单的呀。Talk is cheap. Show me the code。

public class MainActivity extends AppCompatActivity implements PullLayout.OnPullCallBackListener
{

    @Bind(R.id.listview)
    SwipeMenuListView mListView;

    @Bind(R.id.pulllayout)
    PullLayout mPullLayout;

    private List<String> mLists = new ArrayList<>();

    private SwipeAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        init();
    }

    private void init()
    {
        mPullLayout.setOnPullListener(this);
        for (int i = 0; i < 20; i++)
        {
            mLists.add("This is the " + i + " Item");
        }
        mAdapter = new SwipeAdapter();

        mListView.setAdapter(mAdapter);

        SwipeMenuCreator creator = new SwipeMenuCreator() {

            @Override
            public void create(SwipeMenu menu) {
                // create "open" item
                SwipeMenuItem openItem = new SwipeMenuItem(
                        getApplicationContext());
                // set item background
                openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9,
                        0xCE)));
                // set item width
                openItem.setWidth(dp2px(90));
                // set item title
                openItem.setTitle("Open");
                // set item title fontsize
                openItem.setTitleSize(18);
                // set item title font color
                openItem.setTitleColor(Color.WHITE);
                // add to menu
                menu.addMenuItem(openItem);

                // create "delete" item
                SwipeMenuItem deleteItem = new SwipeMenuItem(
                        getApplicationContext());
                // set item background
                deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,
                        0x3F, 0x25)));
                // set item width
                deleteItem.setWidth(dp2px(90));
                // set a icon
                deleteItem.setIcon(R.drawable.ic_delete);
                // add to menu
                menu.addMenuItem(deleteItem);
            }
        };

        // set creator
        mListView.setMenuCreator(creator);

        mListView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
                switch (index) {
                    case 0:
                        break;
                    case 1:
                        AppMsg.makeText(MainActivity.this, "您关闭了:" + mAdapter.getItem(position), AppMsg.STYLE_CONFIRM).show();
                        mLists.remove(position);
                        mAdapter.notifyDataSetChanged();
                        break;
                }
                // false : close the menu; true : not close the menu
                return false;
            }
        });
    }

    @Override
    public void onRefresh()
    {
        postDelay(new Runnable()
        {
            @Override
            public void run()
            {
                mPullLayout.finishPull();
            }
        });
    }

    @Override
    public void onLoad()
    {
        postDelay(new Runnable()
        {
            @Override
            public void run()
            {
                mPullLayout.finishPull();
            }
        });
    }

    private void postDelay(Runnable action)
    {
        getWindow().getDecorView().postDelayed(action, 3000);
    }

    private int dp2px(int dp)
    {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());
    }

    class SwipeAdapter extends BaseAdapter
    {

        @Override
        public int getCount()
        {
            return mLists.size();
        }

        @Override
        public String getItem(int position)
        {
            return mLists.get(position);
        }

        @Override
        public long getItemId(int position)
        {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            if (convertView == null)
            {
                convertView = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
            }
            TextView text = (TextView) convertView;
            text.setText(mLists.get(position));
            return convertView;
        }
    }
}

看了代码,是不是发现很简单呢。PullLayout负责上拉刷新和下拉加载,
SwipeMenuListview负责侧滑效果,两者各自管理自己的事情,互不干扰。小伙伴们还不赶紧去试试。

对于PullLayout,这是一个刚开源不久的项目,可以自定义下拉上拉的布局,支持RecyclerView(LinearLayoutManager-VERTICAL模式),具体的功能大家去关注,Star和Fork它。一起努力加油吧。向巨人们看齐。

这是本菜鸟的第一篇博客,谢谢大家。

源码地址

ListView下拉刷新水滴效果 ListView水滴效果的下拉刷新。具有新的动态感。 立即下载

相关推荐

ios-水滴效果的下拉刷新.zip

自己封装的水滴效果的下拉刷新,不算太好,期待更好的作品。。。

android 高仿IOS水滴版上下拉刷新的Listview

之前有分享一些刷新的Demo,最近找到一个刷新的例子,分享给大家。同时感谢原作者的分享! 现在给大家分享一个高仿IOS的Listview刷新效果,支持上下拉刷新。有些类似自定义的XListView 控件,与其不同的在于它刷新的时候有类似水滴的下拉效果。 给大家看看效果图先: 下面是它定义动画的类, 主要是在判断距离的时候创建回弹动画,代码有注释可以瞅瞅先

seven2729的专栏 4570

ios-仿QQ阅读下拉刷新效果.zip

仿QQ阅读下拉刷新效果 https://github.com/manfengjun/FJRefresh

仿IOS版QQ的下拉刷新头实现原理

一直很好奇苹果版QQ的下拉刷新头,那种水滴状的感觉,特别有弹性的感觉,于是趁着项目比较松的时候也来实现一下,这是实现后的图 最主要的要知道这个图形的画法,我使用的是Path路径来做的,然后使用填充画笔,把他全部填充 主要使用两个半圆和两条二次曲线构成 于是引入关键代码 补充一下,path中绘制圆弧用的是arcTo方法,不仅可以绘制圆弧也可以绘制椭圆圆弧,传入矩形

xingyun1992的博客 2536

Android代码-“水滴”swipeRefreshLayout

WaveSwipeRefreshLayout ![Release](https://img.shields.io/github/release/recruit-lifestyle/WaveSwipeRefreshLayout.svg?label=maven version) []() This project aims to provide a reusable WaveSwipe to Refresh widget for Android. Even if this works fine with API.13 or less, we support only for API.14 or more. Screenshots Watch YouTube video here. Requirements Target Sdk Version : 21 Min Sdk Version : 14 How to use Add this to your build.gradle. repositories { maven { url "https://jitpa

仿QQ下拉刷新

仿QQ下拉刷新 实现原理比较简单,可以直接运行看到效果

Android 仿IOS版QQ实现下拉刷新水滴的效果

基于XListView的基础上,把它的头部刷新换成自己定义的控件,这与IOS版上的QQ刷新类似。效果如下: 水滴效果可以看我的上一篇博客 水滴效果实现一、代码由于这是基于XListView 的,所以大部分代码就不贴了,只是把头部的headerview代码修改。1、通过改变控件的高度来实现动态效果。这部分是在XListView 上实现。xlistview_waterEffect.getLayout

LHavoc的博客 2091

IOS 仿Path水滴刷新效果

从工程里面剥离出来的 仿Path水滴下拉 视差的headview 效果

安卓开发中非常炫的效果集合

这几天开发的时候,想做一些好看而且酷炫的特效,于是又开始从网上收集各种特效资源。下面给大家一些我喜欢的把,附代码,喜欢的看源代码,然后加到自己项目去把

yuxia761 9841

大语言模型无代码构建知识图谱概述

由示例可以看出,大语言模型的泛化能力能够非常精准的抽取文本中的实体、关系等知识信息。其能够大大提升知识提取的效率与准确性。HuggingFists低代码平台的出现进一步促进了知识图谱构建的效率。它大幅降低了知识图谱构建人员的技术要求,使得从事该工作的人员有了更大的选择范围。不断下降的构建成本,意味着可以有更多的客户享受到知识图谱带来的业务价值。

colorknight的专栏 1817

电磁波函数复数表示法:为什么物理学家偏爱e^(ikz)而非cos(kr-wt)?

本文深入解析了电磁波函数复数表示法(如e^(ikz))相较于传统余弦形式的巨大优势。通过欧拉公式,复数形式将复杂的三角运算转化为简洁的指数运算,在微分、积分、线性叠加及处理相位时展现出极高的计算效率,是物理学家和工程师分析波动现象的核心工具。

weixin_29094539的博客 498

RNA二级结构可视化:如何将BPfold输出转换为 publication 级图像

BPfold作为HuggingFace镜像项目multimolecule的重要组件,是一款高效的RNA二级结构预测工具。对于科研人员而言,将BPfold生成的预测结果转换为符合 publication 标准的图像,是展示研究成果的关键步骤。本文将为你详细介绍完整的转换流程,帮助你轻松获得高质量的RNA二级结构可视化图像。 ## 了解BPfold的输出格式 在进行可视化之前,首先需要明确BPfo

gitblog_01078的博客 367

保姆级教程:用Multisim仿真快速上手二极管、MOSFET和IGBT的开关特性

本文提供了一份详细的Multisim仿真教程,帮助读者快速掌握二极管、MOSFET和IGBT的开关特性。通过搭建实验电路、观察波形特征和参数影响分析,深入解析了反向恢复过程、米勒平台现象和拖尾电流效应。适合电力电子初学者和工程师通过仿真建立直观理解,提升电路设计能力。

weixin_29290863的博客 498

Android 开源项目分类汇总指南:android-open-project 五大板块全景索引与选型参考

本文以开源仓库 android-open-project 的中文主文档 [README.zh.md](https://link.gitcode.com/i/f4fe4b84277f82d3a0a351eeb57caad2) 为骨架,系统梳理其收录的 Android 开源项目全景:从个性化控件(View)到常用工具库,从完整优秀项目到开发/测试工具,再到值得关注的优秀个人与组织。阅读本文后,你将获得

gitblog_01128的博客 466

昇腾AI原生创新算子挑战赛(S1赛季)复盘-LessEqual算子

【代码】昇腾AI原生创新算子挑战赛(S1赛季)复盘-LessEqual算子。

william_myq的博客 507

16、天文时间序列分类:基于人工神经网络的研究

本研究探讨了基于人工神经网络的天文时间序列分类方法,重点比较了MLP、LSTM和CNN等模型在BRITE和开普勒K2数据集上的表现。研究发现LSTM不适用于此类数据,而结合特征提取与PSO超参数优化的多层感知器(MLP)在开普勒K2数据上实现了98.55%的二分类准确率。通过精细的数据预处理和高置信度样本选择,显著提升了分类性能。研究成果为恒星变异性识别提供了高效工具,并对天文学与机器学习交叉领域具有重要参考价值。

pz8901234的博客 112

Android 开源项目分类汇总(android-open-project)完整指南:个性化控件、工具库与开发测试工具全景索引

android-open-project 是一个**分类汇总型的 Android 开源项目索引仓库**,其价值不在于提供可运行的源码,而在于用一套清晰、可检索的分类体系,把海量第三方开源项目按"控件 → 库 → 项目 → 工具 → 人"的维度组织起来。 从 [docs/oss-program-readiness.md](https://link.gitcode.com/i/c52df8b982c

gitblog_00983的博客 438

无人机视觉锁定与目标跟踪技术深度解析(含完整代码)

本文介绍了无人机视觉锁定系统的核心技术实现,包括系统架构、目标检测与跟踪算法。系统采用YOLOv5进行初始目标检测,结合手动框选作为备选方案。在跟踪环节对比了KCF、CSRT等传统方法和SiamFC等深度学习算法,最终选用CSRT作为CPU平台最优方案。文章详细解析了相关滤波跟踪的数学原理,并提供了目标检测器和跟踪器的Python实现代码。该系统能有效处理目标遮挡、光照变化等挑战,为无人机自主跟踪提供了实用解决方案。

电脑管家 685

非常简单的下拉刷新和下拉加载更多效果,仿IOS水滴,效果非常好,集成也很简单。

为了跟苹果的下拉刷新和上拉加载做的效果一样,找了个仿IOS水滴的刷新效果图。 集成很方便,下载了直接用AS打开。没有用依赖库。 效果图如下: https://github.com/THEONE10211024/WaterDropListView/blob/master/demo/demo.gif 项目下载地址: http://download.youkuaiyun.com/det

zzq的博客 3956

锂电池SOH预测 | 基于BP神经网络的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 | 基于BP神经网络的锂电池SOH预测(附matlab完整源码)

天天酷科研的博客 1113

杰理可视化SDK开发-杰理AC1123N芯片SDK开发笔记合集

该文档主要描述 AC112N开发相关的使用说明和注意事项,收集并持续更新开发调试过程中的相关疑问和解答,对SDK介绍文档做一个补充说明。写作人:李永奉,参考项目MD-026H; AC112N-SDK项目帮助文档在杰理开发者平台(JL DP)'帮助'处进入,如本文档有与后续帮助文档或工具注释说明冲突,以后者为标准。

李永奉的博客 180

iOS自定义下拉刷新控件

iOS自定义下拉刷新控件

xo19882011的专栏 1039

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IOS Demo -下拉刷新实践(Swift)

Demo环境:IOS 15,Xcode 13, swift。

下半年记忆的博客 1391

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

仿IOS中下拉刷新的“雨滴”效果

在IOS中,有非常赞的“水滴”下拉效果,很久之前也想在Android上实现,但是苦于能力有限,一直未能付诸行动。这几天趁着空隙时间,写了一版初步实现,基本达到了“水滴”拖拽的效果。但是还有很多细节需要进一步完善。现将源代码公布出来,希望得到更多人的支持和完善。也希望你们能喜欢。代码有清晰的注释,相信代码是最好的老师!欢迎各位批评指正!你的start和fork是对我最大的支持! 源码地址:http

THEONE10211024的专栏 4345

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Github 上的 iOS 开源项目

在 Github 上 Star 太多了,有时候很难找到自己想要的开源库,所以在此记录下来。便于自己开发使用,也顺便分享给大家。  动画 awesome-ios-animation收集了iOS平台下比较主流炫酷的几款动画框架 RCTRefreshControlqq的下拉刷新 TBIconTransitionKiticon 的点击动画过渡效果 PullToBounce类似百度外卖的下拉刷...

weixin_34324081的博客 509

iOS - 用 UIBezierPath 实现qq下拉刷新效果

https://github.com/Resory/RYCuteView

徐文俊的博客 714
下一篇: 记Android Studio自定义属性访问不了的问题
guodongAndroid
博客等级 码龄10年 16粉丝 19原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值