首先,放上该智能第三方库的GitHub地址https://github.com/scwang90/SmartRefreshLayout/tree/master

使用步骤
1、在build.gradle中添加依赖

//1.1.0 API改动过大,老用户升级需谨慎
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-6'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-6'//没有使用特殊Header,可以不加这行
compile 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必须)//1.0.5 当1.1.0出现问题可以回退到1.0.5.1
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.5.1'//没有使用特殊Header,可以不加这行
compile 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必须)
compile 'com.android.support:design:25.3.1'//版本随意(非必须,引用可以解决无法预览问题)

2、在布局文件中添加SmartRereshLayout

<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smartrefresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/refreshLayout"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v7.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent"android:overScrollMode="never"android:background="#fff" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>

3、在Activity或fragment中添加代码

RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
refreshLayout.setOnRefreshListener(new OnRefreshListener() {@Overridepublic void onRefresh(RefreshLayout refreshlayout) {refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败}
});
refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {@Overridepublic void onLoadMore(RefreshLayout refreshlayout) {refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败}
});

4、使用指定的Header和Footer
方法一 全局设置

public class App extends Application {//static 代码段可以防止内存泄露static {//设置全局的Header构建器SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {@Overridepublic RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色return new ClassicsHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header}});//设置全局的Footer构建器SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {@Overridepublic RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {//指定为经典Footer,默认是 BallPulseFooterreturn new ClassicsFooter(context).setDrawableSize(20);}});}
}

注意:方法一 设置的Header和Footer的优先级是最低的,如果同时还使用了方法二、三,将会被其它方法取代

方法二 XML布局文件指定

<com.scwang.smartrefresh.layout.SmartRefreshLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/refreshLayout"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#444444"app:srlPrimaryColor="#444444"app:srlAccentColor="@android:color/white"app:srlEnablePreviewInEditMode="true"><!--srlAccentColor srlPrimaryColor 将会改变 Header 和 Footer 的主题颜色--><!--srlEnablePreviewInEditMode 可以开启和关闭预览功能--><com.scwang.smartrefresh.layout.header.ClassicsHeader
        android:layout_width="match_parent"android:layout_height="wrap_content"/><TextView
        android:layout_width="match_parent"android:layout_height="match_parent"android:padding="@dimen/padding_common"android:background="@android:color/white"android:text="@string/description_define_in_xml"/><com.scwang.smartrefresh.layout.footer.ClassicsFooter
        android:layout_width="match_parent"android:layout_height="wrap_content"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>

注意:方法二 XML设置的Header和Footer的优先级是中等的,会被方法三覆盖。
方法三 Java代码设置

final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
//设置 Header 为 贝塞尔雷达 样式
refreshLayout.setRefreshHeader(new BezierRadarHeader(this).setEnableHorizontalDrag(true));
//设置 Footer 为 球脉冲 样式
refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));

4、相关属性即方法解读
一、恢复经典模式,SmartRefresh默认使用了比较新的功能,如:越界回弹、越界拖动、自动加载更多,这些效果都是比较流行,并且具有仿苹果的效果,如果之前使用很早的经典刷新库的童鞋感觉不适应,这些功能都是可以关闭的。
方法一 代码设置

refreshLayout.setEnableAutoLoadMore(false);//使上拉加载具有弹性效果
refreshLayout.setEnableOverScrollDrag(false);//禁止越界拖动(1.0.4以上版本)
refreshLayout.setEnableOverScrollBounce(false);//关闭越界回弹功能

XML属性设置

 <com.scwang.smartrefresh.layout.SmartRefreshLayoutxmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"app:srlEnableOverScrollDrag="false"app:srlEnableAutoLoadMore="false"app:srlEnableOverScrollBounce="false"></com.scwang.smartrefresh.layout.SmartRefreshLayout>

二、其他方法解读

public class RefreshActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {//下面示例中的值等于默认值RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);//在项目中使用到的方法refreshLayout.setEnableRefresh(true);//是否启用下拉刷新功能refreshLayout.setEnableLoadMore(false);//是否启用上拉加载功能refreshLayout.setEnableAutoLoadMore(true);//是否启用列表惯性滑动到底部时自动加载更多refreshLayout.setEnableLoadMoreWhenContentNotFull(true);//是否在列表不满一页时候开启上拉加载功能refreshLayout.setEnableOverScrollBounce(true);//是否启用越界回弹refreshLayout.setEnableOverScrollDrag(false);//是否启用越界拖动(仿苹果效果)1.0.4refreshLayout.autoRefresh();//自动刷新refreshLayout.autoLoadMore();//自动加载refreshLayout.setRefreshHeader(new ClassicsHeader(context));//设置HeaderrefreshLayout.setRefreshFooter(new ClassicsFooter(context));//设置Footer/*这几个方法是比较重要的*/// 这两个方法是在加载成功并且还有数据的情况下调用的refreshLayout.finishRefresh();//结束刷新refreshLayout.finishLoadMore();//结束加载// 这两个方法是在加载失败时调用的refreshLayout.finishRefresh(false);//结束刷新(刷新失败)refreshLayout.finishLoadMore(false);//结束加载(加载失败)// 这个方法是在最后一页,没有更多数据时调用的,会在页面底部标记没有更多数据 refreshLayout.finishLoadMoreWithNoMoreData();//完成加载并标记没有更多数据 1.0.4// 这个方法最重要,当在最后一页调用完上一个完成加载并标记没有更多数据的方法时,需要将refreshLayout的状态更改为还有更多数据的状态,此时就需要调用此方法,参数为false代表还有更多数据,true代表没有更多数据refreshLayout.setNoMoreData(false);//恢复没有更多数据的原始状态 1.0.5// 这里需要注意这几个结束加载和结束刷新的方法,分好几种使用的情况,可以在不同的情况下使用/*** 完成刷新* @return RefreshLayout*/RefreshLayout finishRefresh();/*** 完成刷新* @param delayed 开始延时* @return RefreshLayout*/RefreshLayout finishRefresh(int delayed);/*** 完成加载* @param success 数据是否成功刷新 (会影响到上次更新时间的改变)* @return RefreshLayout*/RefreshLayout finishRefresh(boolean success);/*** 完成刷新* @param delayed 开始延时* @param success 数据是否成功刷新 (会影响到上次更新时间的改变)* @return RefreshLayout*/RefreshLayout finishRefresh(int delayed, boolean success);/*** 完成加载* @return RefreshLayout*/RefreshLayout finishLoadMore();/*** 完成加载* @param delayed 开始延时* @return RefreshLayout*/RefreshLayout finishLoadMore(int delayed);/*** 完成加载* @param success 数据是否成功* @return RefreshLayout*/RefreshLayout finishLoadMore(boolean success);/*** 完成加载* @param delayed 开始延时* @param success 数据是否成功* @param noMoreData 是否有更多数据* @return RefreshLayout*/RefreshLayout finishLoadMore(int delayed, boolean success, boolean noMoreData);/*** 完成加载并标记没有更多数据* @return RefreshLayout*/RefreshLayout finishLoadMoreWithNoMoreData();/**/refreshLayout.autoRefresh(400);//延迟400毫秒后自动刷新refreshLayout.autoLoadMore(400);//延迟400毫秒后自动加载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.5refreshLayout.setFooterHeaderInsetStartPx(0);//同上-像素为单位 1.0.5 (V1.1.0删除)refreshLayout.setFooterFooterInsetStart(0);//设置 Footer 起始位置偏移量 1.0.5refreshLayout.setFooterFooterInsetStartPx(0);//同上-像素为单位 1.0.5 (V1.1.0删除)refreshLayout.setHeaderMaxDragRate(2);//最大显示下拉高度/Header标准高度refreshLayout.setFooterMaxDragRate(2);//最大显示下拉高度/Footer标准高度refreshLayout.setHeaderTriggerRate(1);//触发刷新距离 与 HeaderHeight 的比率1.0.4refreshLayout.setFooterTriggerRate(1);//触发加载距离 与 FooterHeight 的比率1.0.4refreshLayout.setEnablePureScrollMode(false);//是否启用纯滚动模式refreshLayout.setEnableNestedScroll(false);//是否启用嵌套滚动refreshLayout.setEnableScrollContentWhenLoaded(true);//是否在加载完成时滚动列表显示新的内容refreshLayout.setEnableHeaderTranslationContent(true);//是否下拉Header的时候向下平移列表或者内容refreshLayout.setEnableFooterTranslationContent(true);//是否上拉Footer的时候向上平移列表或者内容refreshLayout.setEnableFooterFollowWhenLoadFinished(false);//是否在全部加载结束之后Footer跟随内容1.0.4refreshLayout.setEnableScrollContentWhenRefreshed(true);//是否在刷新完成时滚动列表显示新的内容 1.0.5refreshLayout.srlEnableClipHeaderWhenFixedBehind(true);//是否剪裁Header当时样式为FixedBehind时1.0.5refreshLayout.srlEnableClipFooterWhenFixedBehind(true);//是否剪裁Footer当时样式为FixedBehind时1.0.5refreshLayout.setDisableContentWhenRefresh(false);//是否在刷新的时候禁止列表的操作refreshLayout.setDisableContentWhenLoading(false);//是否在加载的时候禁止列表的操作refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener());//设置多功能监听器refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDecider());//设置滚动边界判断refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDeciderAdapter());//自定义滚动边界refreshLayout.setRefreshContent(new View(context));//设置刷新Content(用于动态替换空布局,不推荐)1.0.4refreshLayout.resetNoMoreData();//恢复没有更多数据的原始状态 1.0.4(1.1.0删除)

对头布局和底布局展示界面的相关设置
1、这里需要注意的是关于这些界面属性的设置,拿文字的设置为例,我们看下源码的设置过程

// 这是REFRESH_HEADER_PULLING的初始化
public static String REFRESH_HEADER_PULLING = null;//"下拉可以刷新";// 这是为REFRESH_HEADER_PULLING赋值,我们可以看出,如果刚开始REFRESH_HEADER_PULLING为空的话,就为它赋值为context.getString(R.string.srl_header_pulling),默认的是“下拉可以刷新”,因此如果,我们想修改文字,可以有两种方法,一,我们为REFRESH_HEADER_PULLING赋值,即在代码中写ClassicsHeader.REFRESH_HEADER_PULLING = "下拉释放刷新",二,在XML文件中将R.string.srl_header_pulling对应的值改为“下拉释放刷新”if (REFRESH_HEADER_PULLING == null) {REFRESH_HEADER_PULLING = context.getString(R.string.srl_header_pulling);}
public class RefreshActivity extends Activity {static {ClassicsHeader.REFRESH_HEADER_PULLDOWN = "下拉可以刷新";ClassicsHeader.REFRESH_HEADER_REFRESHING = "正在刷新...";ClassicsHeader.REFRESH_HEADER_LOADING = "正在加载...";ClassicsHeader.REFRESH_HEADER_RELEASE = "释放立即刷新";ClassicsHeader.REFRESH_HEADER_FINISH = "刷新完成";ClassicsHeader.REFRESH_HEADER_FAILED = "刷新失败";ClassicsHeader.REFRESH_HEADER_SECONDARY = "释放进入二楼";ClassicsHeader.REFRESH_HEADER_LASTTIME = "上次更新 M-d HH:mm";ClassicsHeader.REFRESH_HEADER_LASTTIME = "'Last update' M-d HH:mm";}@Overrideprotected void onCreate(Bundle savedInstanceState) {ClassicsHeader.REFRESH_HEADER_PULLDOWN = getString(R.string.header_pulldown);//"下拉可以刷新";ClassicsHeader.REFRESH_HEADER_REFRESHING = getString(R.string.header_refreshing);//"正在刷新...";ClassicsHeader.REFRESH_HEADER_LOADING = getString(R.string.header_loading);//"正在加载...";ClassicsHeader.REFRESH_HEADER_RELEASE = getString(R.string.header_release);//"释放立即刷新";ClassicsHeader.REFRESH_HEADER_FINISH = getString(R.string.header_finish);//"刷新完成";ClassicsHeader.REFRESH_HEADER_FAILED = getString(R.string.header_failed);//"刷新失败";ClassicsHeader.REFRESH_HEADER_SECONDARY = getString(R.string.header_secondary);//"释放进入二楼";ClassicsHeader.REFRESH_HEADER_LASTTIME = getString(R.string.header_lasttime);//"上次更新 M-d HH:mm";ClassicsHeader.REFRESH_HEADER_LASTTIME = getString(R.string.header_lasttime);//"'Last update' M-d HH:mm"//下面示例中的值等于默认值ClassicsHeader header = (ClassicsHeader)findViewById(R.id.header);header.setAccentColor(android.R.color.white);//设置强调颜色header.setPrimaryColor(R.color.colorPrimary);//设置主题颜色header.setTextSizeTitle(16);//设置标题文字大小(sp单位)header.setTextSizeTitle(16, TypedValue.COMPLEX_UNIT_SP);//同上(1.1.0版本删除)header.setTextSizeTime(10);//设置时间文字大小(sp单位)header.setTextSizeTime(10, TypedValue.COMPLEX_UNIT_SP);//同上(1.1.0版本删除)header.setTextTimeMarginTop(10);//设置时间文字的上边距(dp单位)header.setTextTimeMarginTopPx(10);//同上-像素单位(1.1.0版本删除)header.setEnableLastTime(true);//是否显示时间header.setFinishDuration(500);//设置刷新完成显示的停留时间(设为0可以关闭停留功能)header.setDrawableSize(20);//同时设置箭头和图片的大小(dp单位)header.setDrawableArrowSize(20);//设置箭头的大小(dp单位)header.setDrawableProgressSize(20);//设置图片的大小(dp单位)header.setDrawableMarginRight(20);//设置图片和箭头和文字的间距(dp单位)header.setDrawableSizePx(20);//同上-像素单位header.setDrawableArrowSizePx(20);//同上-像素单位(1.1.0版本删除)header.setDrawableMarginRightPx(20);//同上-像素单位(1.1.0版本删除)header.setArrowBitmap(bitmap);//设置箭头位图(1.1.0版本删除)header.setArrowDrawable(drawable);//设置箭头图片header.setArrowResource(R.drawable.ic_arrow);//设置箭头资源header.setProgressBitmap(bitmap);//设置图片位图(1.1.0版本删除)header.setProgressDrawable(drawable);//设置图片header.setProgressResource(R.drawable.ic_progress);//设置图片资源header.setTimeFormat(new DynamicTimeFormat("上次更新 %s"));//设置时间格式化(时间会自动更新)header.setLastUpdateText("上次更新 3秒前");//手动更新时间文字设置(将不会自动更新时间)header.setSpinnerStyle(SpinnerStyle.Translate);//设置移动样式(不支持:MatchLayout)

Footer的设置和Header同理

public class RefreshActivity extends Activity {static {ClassicsFooter.REFRESH_FOOTER_PULLING = "上拉加载更多";ClassicsFooter.REFRESH_FOOTER_RELEASE = "释放立即加载";ClassicsFooter.REFRESH_FOOTER_REFRESHING = "正在刷新...";ClassicsFooter.REFRESH_FOOTER_LOADING = "正在加载...";ClassicsFooter.REFRESH_FOOTER_FINISH = "加载完成";ClassicsFooter.REFRESH_FOOTER_FAILED = "加载失败";ClassicsFooter.REFRESH_FOOTER_NOTHING = "没有更多数据了";}@Overrideprotected void onCreate(Bundle savedInstanceState) {ClassicsFooter.REFRESH_FOOTER_PULLING = getString(R.string.footer_pulling);//"上拉加载更多";ClassicsFooter.REFRESH_FOOTER_RELEASE = getString(R.string.footer_release);//"释放立即加载";ClassicsFooter.REFRESH_FOOTER_REFRESHING = getString(R.string.footer_refreshing);//"正在刷新...";ClassicsFooter.REFRESH_FOOTER_LOADING = getString(R.string.footer_loading);//"正在加载...";ClassicsFooter.REFRESH_FOOTER_FINISH = getString(R.string.footer_finish);//"加载完成";ClassicsFooter.REFRESH_FOOTER_FAILED = getString(R.string.footer_failed);//"加载失败";ClassicsFooter.REFRESH_FOOTER_NOTHING = getString(R.string.footer_nothing);//"没有更多数据了";//下面示例中的值等于默认值ClassicsFooter footer = (ClassicsFooter)findViewById(R.id.footer);footer.setAccentColor(android.R.color.white);//设置强调颜色footer.setPrimaryColor(R.color.colorPrimary);//设置主题颜色footer.setTextSizeTitle(16);//设置标题文字大小(sp单位)footer.setTextSizeTitle(16, TypedValue.COMPLEX_UNIT_SP);//同上footer.setFinishDuration(500);//设置刷新完成显示的停留时间footer.setDrawableSize(20);//同时设置箭头和图片的大小(dp单位)footer.setDrawableArrowSize(20);//设置箭头的大小(dp单位)footer.setDrawableProgressSize(20);//设置图片的大小(dp单位)footer.setDrawableMarginRight(20);//设置图片和箭头和文字的间距(dp单位)footer.setDrawableSizePx(20);//同上-像素单位(1.1.0版本删除)footer.setDrawableArrowSizePx(20);//同上-像素单位(1.1.0版本删除)footer.setDrawableProgressSizePx(20);//同上-像素单位(1.1.0版本删除)footer.setDrawableMarginRightPx(20);//同上-像素单位(1.1.0版本删除)footer.setArrowBitmap(bitmap);//设置箭头位图(1.1.0版本删除)footer.setArrowDrawable(drawable);//设置箭头图片footer.setArrowResource(R.drawable.ic_arrow);//设置箭头资源footer.setProgressBitmap(bitmap);//设置图片位图(1.1.0版本删除)footer.setProgressDrawable(drawable);//设置图片footer.setProgressResource(R.drawable.ic_progress);//设置图片资源footer.setSpinnerStyle(SpinnerStyle.Translate);//设置移动样式(不支持:MatchLayout)}
}

此次使用该框架的心得:
该框架已经做得比较成熟,API也做得很充分

此次任务心得:
最关键的问题是对问题的定位,以及相关逻辑的实现,,,要明白有很多种状态,在不同的状态下所做的操作不同。一定要加强逻辑思维的锻炼,明白问题的根本原因是什么,多刷算法题。

SmartRefreshLayout 下拉刷新上拉加载框架相关推荐

  1. Flutter开发之ListView下拉刷新上拉加载更多(35)

    在Flutter开发之ListView组件(21) 文章中,我们了解了ListView组件的基本使用.但是数据比较少,没有涉及分页加载.而实际开发中,下拉刷新和分页加载几乎是所有APP的标配.在iOS ...

  2. 下拉加载 实现 java_[Java教程]iscroll5实现一个下拉刷新上拉加载的效果

    [Java教程]iscroll5实现一个下拉刷新上拉加载的效果 0 2016-08-24 15:00:08 直接上代码!!! * { margin: 0; padding: 0; } ul, li { ...

  3. 小程序在父组件执行子组件方法,可适用于下拉刷新上拉加载之后执行子组件方法

    当父组件引用了子组件的时候,会遇到父组件执行子组件的方法,比如下拉刷新上拉加载等事件只有在页面中才能检测到,但是获取数据的方法在子组件,这时就可以执行子组件方法. 思路很简单,类似于vue中给子组件加 ...

  4. 分享轮子-flutter下拉刷新上拉加载

    flutter下拉上拉组件轮子 什么是flutter? 首先说下flutter,估计这个应该挺多人没听过flutter这个框架,它是一个google推出的跨平台的移动应用UI框架,和React Nat ...

  5. 使用MJRefresh自定义下拉刷新,上拉加载动画

    有时候我们需要自己设置下拉刷新,上拉加载动画的实现,这里主要是记录下使用MJRefresh自定义下拉刷新,上拉加载动画..... 下拉刷新我们只需要继承MJRefreshGifHeader即可: 实现 ...

  6. android listview下拉刷新动画,android 安卓 listview 支持下拉刷新 上拉加载更多

    [1]重写listViewimport java.text.SimpleDateFormat; import java.util.Date; import com.example.testdddlea ...

  7. react-native 自定义 下拉刷新 / 上拉加载更多 组件

    1.封装 Scroller 组件 src/components/Scroller/index.js /*** 下拉刷新/上拉加载更多 组件(Scroller)*/ import React, {Com ...

  8. Android ListView 实现下拉刷新上拉加载

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/39965327 1.简介 无疑,在Android开发中,ListView是使用非常频 ...

  9. android 列表上拉加载更多,Android 下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView...

    麦洛遇到这样一个需求,实现类似于IOS下拉刷新,上拉加载更多的控件.麦洛google,baidu了一番,网上有不少实现,比较常见的是国外牛人的实现,不过国外的实现基本上都是扩展于ListView,所以 ...

  10. 小程序在父组件执行子组件方法,可适用于下拉刷新上拉加载之后执行子组件方法...

    当父组件引用了子组件的时候,会遇到父组件执行子组件的方法,比如下拉刷新上拉加载等事件只有在页面中才能检测到,但是获取数据的方法在子组件,这时就可以执行子组件方法. 思路很简单,类似于vue中给子组件加 ...

最新文章

  1. 规格表管理之保存规格表数据表数据
  2. 你之所以没成为成就,就是因为太刻苦了!
  3. tensorflow_yolo-v3 Intel Realsense 视频流处理模块 opencv.videocapture()
  4. hdu-4028 The time of a day
  5. 界面设计 java_Java界面设计
  6. oracle无法重建em,ORACLE 11g, EM 无法启动的问题和重建
  7. css动画(transition/transform/animation)
  8. 图文详解YUV420数据格式
  9. microsoftedge无限弹出_Win10升级之后edge浏览器总是弹出欢迎页面解决方法
  10. java连接twitter登录,android中接入twitter进行第三方登录
  11. 【CodeForces 767C】Garland (树形DP)
  12. 波士顿法律第一至五季/全集Boston Legal迅雷下载
  13. feather初体验
  14. ps、firewords在win78中无法直接拖入的问题解决方法
  15. 解析Unity3D中计算法线矩阵的函数
  16. matplotlib总结
  17. 磁疗是真的吗?磁场对穴位和经络传感的作用与影响
  18. python爬虫方向的第三方库_requests 第三方库
  19. ae导出gif插件_GifGun插件|Aescaripts GifGun(ae输出gif插件)下载v1.7.7免费版 - 欧普软件下载...
  20. 腾讯云从业者资料分享超全(呕心沥血整理)

热门文章

  1. Linux工具篇 | Ubuntu安装string命令
  2. 解决“无法启动此程序,因为计算机中丢失VCRUNTIME140.dll,尝试重新安装此程序以解决此问题”方案合集
  3. 我打算写一个《程序员的成长课》
  4. 永恒之蓝 ms17_010漏洞
  5. 论如何写好一篇需求报告(或者说产品报告)
  6. CSS入门五:文本样式;字体颜色:英文字母,十六进制,RGB;文本颜色,字间距,行间距,对齐方式;下划线、上划线…,文本阴影,字母大小写,首行缩进
  7. 魔力宝贝手游版 服务器维护,魔力宝贝手游10月24日更新维护公告 各大更新内容...
  8. 2020腾讯、百度、华为Android面试题校招汇总(已拿offer
  9. 定期存款遇调息怎么处理?
  10. “感受野”的直观理解