提供一个Android原生的Progress——SwipeToRefreshLayout下拉刷新时的等待动画

先来上个图看看效果:


这里我为什么要单独把这个拿出来呢,因为最近才开始接触Android最新的东西,也就是5.0以上的东西,发现Android提供的SwipeToRefreshLayout是没有上拉加载更多的,在网上找了不少第三方提供加载更多的项目,大部分都还在使用以前ListView时候使用的那一套加载更多的效果,但是效果都不是很好,所以萌生了要把这部分单独抽出来的想法。


第一张图就是在下拉刷新以及加载更多的时候的效果,第二张是加载动画,也是可以放大的,不过在某些手机版本上是没效果的。

我给这个Progress命名为:MaterialProgress,这个文件内部完全是从SwipeToRefreshLayout中扒过来,然后删除了一部分影响使用的东西,所以内部还是很多不必须的代码的,所以,有需要的可以适当的删除。


它的主要用处是可以作为自定义加载更多的加载动画,你一定需要这个。



贴一部分主要代码:

/*** SwipeToRefreshLayout中下拉刷新时的等待圆环* Created by Sahadev on 2015/11/13.*/
public class MaterialProgress extends FrameLayout {<span style="white-space:pre">	</span>...public MaterialProgress(Context context) {this(context, null, 0);}public MaterialProgress(Context context, AttributeSet attrs) {this(context, attrs, 0);}public MaterialProgress(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);this.mRefreshing = false;this.mTotalDragDistance = -1.0F;this.mParentScrollConsumed = new int[2];this.mOriginalOffsetCalculated = false;this.mActivePointerId = -1;this.mCircleViewIndex = -1;this.mRefreshListener = new Animation.AnimationListener() {public void onAnimationStart(Animation animation) {}public void onAnimationRepeat(Animation animation) {}public void onAnimationEnd(Animation animation) {if (MaterialProgress.this.mRefreshing) {MaterialProgress.this.mProgress.setAlpha(255);MaterialProgress.this.mProgress.start();} else {MaterialProgress.this.mProgress.stop();MaterialProgress.this.mCircleView.setVisibility(View.VISIBLE);MaterialProgress.this.setColorViewAlpha(255);if (MaterialProgress.this.mScale) {MaterialProgress.this.setAnimationProgress(0.0F);} else {MaterialProgress.this.setTargetOffsetTopAndBottom(MaterialProgress.this.mOriginalOffsetTop - MaterialProgress.this.mCurrentTargetOffsetTop, true);}}MaterialProgress.this.mCurrentTargetOffsetTop = MaterialProgress.this.mCircleView.getTop();}};this.mAnimateToCorrectPosition = new Animation() {public void applyTransformation(float interpolatedTime, Transformation t) {boolean targetTop = false;boolean endTarget = false;int endTarget1;if (!MaterialProgress.this.mUsingCustomStart) {endTarget1 = (int) (MaterialProgress.this.mSpinnerFinalOffset - (float) Math.abs(MaterialProgress.this.mOriginalOffsetTop));} else {endTarget1 = (int) MaterialProgress.this.mSpinnerFinalOffset;}int targetTop1 = MaterialProgress.this.mFrom + (int) ((float) (endTarget1 - MaterialProgress.this.mFrom) * interpolatedTime);int offset = targetTop1 - MaterialProgress.this.mCircleView.getTop();MaterialProgress.this.setTargetOffsetTopAndBottom(offset, false);MaterialProgress.this.mProgress.setArrowScale(1.0F - interpolatedTime);}};this.mPeek = new Animation() {public void applyTransformation(float interpolatedTime, Transformation t) {boolean targetTop = false;boolean endTarget = false;int endTarget1;if (!MaterialProgress.this.mUsingCustomStart) {endTarget1 = (int) (MaterialProgress.this.mSpinnerFinalOffset - (float) Math.abs(MaterialProgress.this.mOriginalOffsetTop));} else {endTarget1 = (int) MaterialProgress.this.mSpinnerFinalOffset;}int targetTop1 = MaterialProgress.this.mFrom + (int) ((float) (endTarget1 - MaterialProgress.this.mFrom) * interpolatedTime);int offset = targetTop1 - MaterialProgress.this.mCircleView.getTop();MaterialProgress.this.setTargetOffsetTopAndBottom(offset, false);MaterialProgress.this.mProgress.setArrowScale(1.0F - interpolatedTime);}};this.mAnimateToStartPosition = new Animation() {public void applyTransformation(float interpolatedTime, Transformation t) {MaterialProgress.this.moveToStart(interpolatedTime);}};this.mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();this.mMediumAnimationDuration = 500;this.setWillNotDraw(false);this.mDecelerateInterpolator = new DecelerateInterpolator(2.0F);TypedArray a = context.obtainStyledAttributes(attrs, LAYOUT_ATTRS);this.setEnabled(a.getBoolean(0, true));a.recycle();DisplayMetrics metrics = this.getResources().getDisplayMetrics();this.mCircleWidth = (int) (40.0F * metrics.density);this.mCircleHeight = (int) (40.0F * metrics.density);this.createProgressView();ViewCompat.setChildrenDrawingOrderEnabled(this, true);this.mSpinnerFinalOffset = 64.0F * metrics.density;this.mTotalDragDistance = this.mSpinnerFinalOffset;this.mNestedScrollingParentHelper = new NestedScrollingParentHelper(this);this.mNestedScrollingChildHelper = new NestedScrollingChildHelper(this);this.setNestedScrollingEnabled(true);setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light,android.R.color.holo_orange_light, android.R.color.holo_red_light);setRefreshing(true);this.finishSpinner(mTotalDragDistance + 10);}private void setColorViewAlpha(int targetAlpha) {this.mCircleView.getBackground().setAlpha(targetAlpha);this.mProgress.setAlpha(targetAlpha);}public void setSize(int size) {if (size == 0 || size == 1) {DisplayMetrics metrics = this.getResources().getDisplayMetrics();if (size == 0) {this.mCircleHeight = this.mCircleWidth = (int) (56.0F * metrics.density);} else {this.mCircleHeight = this.mCircleWidth = (int) (40.0F * metrics.density);}this.mCircleView.setImageDrawable((Drawable) null);this.mProgress.updateSizes(size);this.mCircleView.setImageDrawable(this.mProgress);}}private void createProgressView() {this.mCircleView = new CircleImageView(this.getContext(), -328966, 20.0F);this.mProgress = new MaterialProgressDrawable(this.getContext(), this);this.mProgress.setBackgroundColor(-328966);this.mCircleView.setImageDrawable(this.mProgress);this.mCircleView.setVisibility(View.VISIBLE);this.mCircleView.setPadding(5, 5, 5, 5);//设置一个内边距this.addView(this.mCircleView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));}<span style="white-space:pre">	</span>...public void setRefreshing(boolean refreshing) {if (refreshing && this.mRefreshing != refreshing) {this.mRefreshing = refreshing;boolean endTarget = false;int endTarget1;if (!this.mUsingCustomStart) {endTarget1 = (int) (this.mSpinnerFinalOffset + (float) this.mOriginalOffsetTop);} else {endTarget1 = (int) this.mSpinnerFinalOffset;}this.setTargetOffsetTopAndBottom(endTarget1 - this.mCurrentTargetOffsetTop, true);this.mNotify = false;this.startScaleUpAnimation(this.mRefreshListener);} else {this.setRefreshing(refreshing, false);}}<span style="white-space:pre">	</span>...}

在使用的时候将项目中的JAVA文件拷入工程即可,不用单独作为一个项目,每个环境可能不一样,可能会出现编译错误。快来试试吧。

项目地址:http://git.oschina.net/sahadev/MaterialProgress

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

导师实验室对学生影响有多大?

读博士导师非常重要&#xff0c;比你们想象得还要更重要。一个优秀的导师不仅在科研帮上很多忙&#xff0c;而且让你懂得怎么做科研&#xff0c;更重要的他教会你怎么做一个合格的学者。 跟这种导师工作&#xff0c;你会发现科研其实是一件非常有趣的事情&#xff0c;它带来的乐…

论文浅尝 | 使用孪生BERT网络生成句子的嵌入表示

论文笔记整理&#xff1a;吴杨&#xff0c;浙江大学计算机学院&#xff0c;知识图谱、NLP方向。https://www.ctolib.com/https://arxiv.org/abs/1908.10084动机谷歌的 BERT 预训练模型&#xff0c;已经能够在两个句子的语义相似度匹配等需要输入一对句子的任务上取得了非常好的…

美团点评效果广告实验配置平台的设计与实现

一. 背景 效果广告的主要特点之一是可量化&#xff0c;即广告系统的所有业务指标都是可以计算并通过数字进行展示的。因此&#xff0c;可以通过业务指标来表示广告系统的迭代效果。那如何在全量上线前确认迭代的结果呢&#xff1f;通用的方法是采用AB实验&#xff08;如图1&…

LeetCode 832. 翻转图像(异或^)

文章目录1. 题目2. 解题1. 题目 给定一个二进制矩阵 A&#xff0c;我们想先水平翻转图像&#xff0c;然后反转图像并返回结果。 水平翻转图片就是将图片的每一行都进行翻转&#xff0c;即逆序。例如&#xff0c;水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。 反转图片的意思是图…

MVP模式在Android中的应用之图片展示选择功能的框架设计

前言&#xff1a;虽然安卓出现的时间比其它平台软件比较晚&#xff0c;但是在我们的安卓开发中&#xff0c;一样可以使用我们所熟知的设计模式来给它一个合理、完善的结构&#xff0c;这样&#xff0c;才可以使我们在平常开发的时候减少冗余代码的发生&#xff0c;真正的提高效…

抑制过拟合之正则化与Dropout

避免过拟合&#xff1a; 1、增大数据集合 – 使用更多的数据&#xff0c;噪声点比减少&#xff08;减少数据扰动所造成的影响&#xff09; 2、减少数据特征 – 减少数据维度&#xff0c;高维空间密度小&#xff08;减少模型复杂度&#xff09; 3、正则化 / dropout / 数据增强…

谈谈神经网络的大规模训练优化

文 | 立交桥跳水冠军源 | 知乎大规模神经网络训练一般会涉及到几百个分布式节点同时工作&#xff0c;模型的参数量以及运算量往往很大&#xff0c;作者认为在这个task下当前的工作主要归结为以下三种&#xff1a;对通信本身的优化&#xff0c;神经网络训练通信的优化&#xff0…

LeetCode 1108. IP 地址无效化

文章目录1. 题目2. 解题1. 题目 给你一个有效的 IPv4 地址 address&#xff0c;返回这个 IP 地址的无效化版本。 所谓无效化 IP 地址&#xff0c;其实就是用 “[.]” 代替了每个 “.”。 示例 1&#xff1a;输入&#xff1a;address "1.1.1.1" 输出&#xff1a;&…

Android NDK开发入门学习笔记(图文教程,极其详尽)

以前也简单用过JNI&#xff0c;但是只是简单用一下&#xff0c;好多都不明白。最近在看源码部分&#xff0c;有涉及到JNI调用的&#xff0c;所以这次打算彻底把它搞定。 先普及一下JNI的调用关系&#xff1a;JAVA------------------------>JNI----------------------------…

论文浅尝 | 利用问题生成提升知识图谱问答

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为知识库问答。来源&#xff1a;NLPCC2019链接&#xff1a;http://tcci.ccf.org.cn/conference/2019/papers/183.pdf本文提出了一种利用问题生成提升知识图谱问答模型性能的方法&#xff08;一个…

顶会论文:基于神经网络StarNet的行人轨迹交互预测算法

1.背景 民以食为天&#xff0c;如何提升超大规模配送网络的整体配送效率&#xff0c;改善数亿消费者在”吃“方面的体验&#xff0c;是一项极具挑战的技术难题。面向未来&#xff0c;美团正在积极研发无人配送机器人&#xff0c;建立无人配送开放平台&#xff0c;与产学研各方共…

python操作mysql数据库实现增删改查

python操作mysql数据库实现增删改查 Python 标准数据库接口为 Python DB-API&#xff0c;Python DB-API为开发人员提供了数据库应用编程接口。 Python 数据库接口支持非常多的数据库&#xff0c;你可以选择适合你项目的数据库&#xff1a; GadFlymSQLMySQLPostgreSQLMicrosoft …

LeetCode 654. 最大二叉树(递归)

文章目录1. 题目2. 解题1. 题目 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给…

Probe:Android线上OOM问题定位组件

配送骑手端App是骑手用于完成配送履约的应用&#xff0c;帮助骑手完成接单、到店、取货及送达&#xff0c;提供各种不同的运力服务&#xff0c;也是整个外卖闭环中的重要节点。由于配送业务的特性&#xff0c;骑手App对于应用稳定性的要求非常高&#xff0c;体现App稳定性的一个…

Android中使用官方提供好的功能使用说明(比如系统图库获取),也作为延生学习的学习文档

这篇文章最核心的就是去学习如何学习Android&#xff0c;如何去使用Android文档。 我们一般在刚开始接触开发的时候&#xff0c;如果遇到无法解决的问题&#xff0c;常常会百度&#xff0c;或者google去寻找答案&#xff0c;比如有个需求是获取系统中的图片&#xff0c;你可能…

再介绍一篇Contrastive Self-supervised Learning综述论文

文 | 黄浴源 | 知乎之前已经介绍过三篇自监督学习的综述&#xff1a;《怎样缓解灾难性遗忘&#xff1f;持续学习最新综述三篇&#xff01;》。这是最近2020年10月arXiv上的又一篇论文"A Survey On Contrastive Self-supervised Learning"。论文地址&#xff1a;https…

GCN-Based User Representation Learning for Unifying Robust Recommendation and Fraudster Detection

GCN-Based User Representation Learning for Unifying Robust Recommendation and Fraudster Detection 点击率预测&#xff1a;其主要思想是根据用户的历史行为对一组未评级的项目进行评级预测&#xff0c;然后从预测评级最高的项目中选择个性化推荐。 欺诈检测&#xff1a;…

公开课 | 知识图谱构建与应用概述

本文转载自公众号&#xff1a;博文视点Broadview。 AI是新的生产力&#xff0c;知识图谱是AI进步的阶梯。随着近年来人工智能的进一步发展&#xff0c;知识图谱也取得了一系列新的进展&#xff0c;并在各个行业中落地应用。知识图谱的相关技术已经在搜索引擎、智能问答、…

LeetCode 217. 存在重复元素(哈希)

文章目录1. 题目2. 解题1. 题目 给定一个整数数组&#xff0c;判断是否存在重复元素。 如果任何值在数组中出现至少两次&#xff0c;函数返回 true。如果数组中每个元素都不相同&#xff0c;则返回 false。 示例 1:输入: [1,2,3,1] 输出: true 示例 2:输入: [1,2,3,4] 输出:…

美团BERT的探索和实践

2018年&#xff0c;自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;领域最激动人心的进展莫过于预训练语言模型&#xff0c;包括基于RNN的ELMo[1]和ULMFiT[2]&#xff0c;基于Transformer[3]的OpenAI GPT[4]及Google BERT[5]等。下图1回顾了近…