CN109308148B - 一种水滴下拉刷新实现方法 - Google Patents

一种水滴下拉刷新实现方法 Download PDF

Info

Publication number
CN109308148B
CN109308148B CN201811039919.6A CN201811039919A CN109308148B CN 109308148 B CN109308148 B CN 109308148B CN 201811039919 A CN201811039919 A CN 201811039919A CN 109308148 B CN109308148 B CN 109308148B
Authority
CN
China
Prior art keywords
variable
android system
animation
type
drop
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201811039919.6A
Other languages
English (en)
Other versions
CN109308148A (zh
Inventor
孙征
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Kuwo Technology Co Ltd
Original Assignee
Beijing Kuwo Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Kuwo Technology Co Ltd filed Critical Beijing Kuwo Technology Co Ltd
Priority to CN201811039919.6A priority Critical patent/CN109308148B/zh
Publication of CN109308148A publication Critical patent/CN109308148A/zh
Application granted granted Critical
Publication of CN109308148B publication Critical patent/CN109308148B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0481Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/0485Scrolling or panning

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Processing Or Creating Images (AREA)

Abstract

本发明涉及一种水滴下拉刷新实现方法,包括如下步骤:定义并实现类WaveView,用来绘制波浪及水滴相关特效,定义并实现类MaterialProgressDrawable,用来设置圆形滚动条样式,刷新过程中的圆形滚动动画效果,定义并实现类AnimationImageView,用来设置动画的监听操作,定义并实现类ProgressAnimationImageView,用来提供旋转动画的自定义控件,定义并实现类WaveSwipeRefreshLayout,用来放置列表视图、带箭头的圆圈刷新视图和水滴波浪视图,处理触摸事件,用来刷新动画状态的设置、刷新接口的回调。本发明,实现下拉波浪水滴刷新效果,算法可扩展性好,支持设置波纹和水滴的颜色、动画时间等特效,增加用户体验效果。

Description

一种水滴下拉刷新实现方法
技术领域
本发明涉及下拉刷新交互设计技术领域,具体说是一种水滴下拉刷新实现方法。
背景技术
在Android系统中提供了下拉刷新的控件SwipeRefreshLayout,当下拉到了一定的高度就会进行刷新,下拉高度不够就会回收上去,在刷新过程中,下拉操作没有反应,即刷新时需要屏蔽掉下拉事件。
控件SwipeRefreshLayout主要应用在竖直滑动时想要刷新页面,它通过设置OnRefreshListener来监听界面的滑动从而实现刷新。当然,也可以通过一些方法来设置SwipeRefreshLayout是否可以刷新。例如:
设置setRefreshing(true),则展开刷新动画。
设置setRefreshing(false),则取消刷新动画。
设置setEnable(true)下拉刷新将不可用。
控件SwipeRefreshLayout在使用时,需要注意:使用这个布局要想达到刷新的目的,需要在这个布局里包裹可以滑动的子控件,如ListView等,并且只能有一个子控件。
综上,使用SwipeRefreshLayout可以实现下拉刷新,前提是布局里需要包裹一个可以滑动的子控件,然后在代码里设置OnRefreshListener设置监听,最后在监听里设置刷新时的数据获取就可以了。
控件SwipeRefreshLayout目前的不足在于:
第一, 动画单一,可定制性不高;
第二, 不能实现下拉波浪水滴刷新效果。
根据研发需求,拟实现下拉波浪水滴刷新效果,丰富下拉刷新的交互效果,提升用户体验。
在酷我音乐盒的推荐功能中,其首页目前采用线条刷新动画,这一交互动画非常常见,缺乏个性化,现考虑对其进行优化,实现下拉波浪水滴刷新效果。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种水滴下拉刷新实现方法,实现下拉波浪水滴刷新效果,算法可扩展性好,支持设置波纹和水滴的颜色、动画时间等特效,增加用户体验效果。
为达到以上目的,本发明采取的技术方案是:
一种水滴下拉刷新实现方法,其特征在于,包括如下步骤:
定义并实现类WaveView,继承Android系统提供的View控件,用来绘制波浪及水滴相关特效,
定义并实现类MaterialProgressDrawable,继承Android系统提供的Drawable类,用来设置一个Material风格的圆形滚动条样式,用于设置刷新过程中的圆形滚动动画效果,
定义并实现类AnimationImageView,继承Android系统提供的图片展示控件ImageView,用来设置动画的监听操作,
定义并实现类ProgressAnimationImageView,继承自定义类AnimationImageView,用来提供旋转动画的自定义控件,
定义并实现类WaveSwipeRefreshLayout,继承Android系统提供的视图容器ViewGroup,用来放置可滑动的列表视图、带箭头的圆圈刷新视图和水滴波浪视图,用来处理相关触摸事件,对事件进行拦截和分发,用来刷新动画状态的设置、刷新接口的回调。
在上述技术方案的基础上,在类WaveView中,具体包括:
绘制波浪相关属性,包括:
变量mWavePath,是Android系统提供的Path类型的变量,用来保存上部波浪特效的路径,
绘制水滴相关属性,包括:
变量mDropCircleRadius,是Android系统提供的浮点数据类型的变量,用来定义水滴圆的半径,
变量mDropTangentPath,是Android系统提供的Path类型的变量,用来保存水滴上面的三角形的路径,
变量mDropCirclePath,是Android系统提供的Path类型的变量,用来保存水滴下面的圆的路径,
变量mDropRect,是Android系统提供的Rect类型的变量,用来保存水滴底部长方形的坐标信息,用来绘制椭圆,
绘制操作相关属性,包括:
变量mPaint,是Android系统提供的画笔Paint类型的变量,用来绘制波浪及水滴图像,
常量DROP_CIRCLE_ANIMATOR_DURATION,是Android系统提供的长整形long类型的常量,用来设置动画执行的时间,默认值为500毫秒,
重写波浪视图中的onDraw方法,用来绘制波浪图像,水滴状图像,
定义beginPhase方法用来计算下拉时的波浪曲线,appearPhase方法用来计算制波浪下拉到一定距离形成水滴的状态曲线,expandPhase方法用来计算继续下拉水滴下落时的曲线,
定义方法startDropAnimation,用来控制水滴下落时的动画效果。
在上述技术方案的基础上,在类MaterialProgressDrawable中,具体包括:
内部类Ring是Android系统提供的Object类型的对象,用来绘制带箭头的圆形样式,
常量ARROW_WIDTH是Android系统提供的整型类型的常量,用来设置箭头的宽度,
常量ARROW_HEIGHT是Android系统提供的整型类型的常量,用来设置箭头的高度,
常量ARROW_OFFSET_ANGLE是Android系统提供的整型类型的常量,用来设置箭头的角度,
变量mResources是Android系统提供的Resources资源类型的变量,用来获取显示器的逻辑密度,
变量mAnimation是Android系统提供的Animation动画类型的变量,用来执行圆形的旋转动画,
变量mRotationCount是Android系统提供的浮点数据类型的变量,用来设置旋转动画执行的次数,
变量mWidth和mHeight,都是Android系统提供的双精度double类型的变量,用来设置圆的大小,
变量mRotation,是Android系统提供的浮点数据类型的变量,用来记录带箭头圆旋转的角度信息,
定义方法draw,用来绘制旋转圆的动画效果。
在上述技术方案的基础上,在类ProgressAnimationImageView中,具体包括:
变量mProgress,是自定义MaterialProgressDrawable类型的变量,用来提供ImageView设置的Drawable,给控件添加带箭头圆的旋转动画效果。
在上述技术方案的基础上,在类WaveSwipeRefreshLayout中,具体包括:
接口OnRefreshListener和其中的抽象方法onRefresh,用来对刷新中的状态回调,
枚举类型STATE,里面有两个状态分别是REFRESHING和PENDING,用来表示正在刷新中和准备刷新,
枚举类型EVENT_PHASE,里面有5中状态分别是WAITING等待中、BEGINNING出现波浪、APPEARING形成水滴、 EXPANDING水滴下沉、 DROPPING水滴下落,
变量mState是STATE枚举类型的变量,初始状态设置为STATE.PENDING,用来标记刷新的状态,
变量mEventPhase是EVENT_PHASE枚举类型的变量,初始值设置为EVENT_PHASE.WAITING,用来标记下拉波浪水滴不同位置的状态,
变量mTarget是Android系统提供的View类型的变量,用来获取可以滑动的列表控件,
变量mCircleView是自定义圆形旋转ProgressAnimationImageView类型的控件,
变量mWaveView是自定义波浪水滴WaveView类型的控件,用来提供波浪水滴等动画特效,
定义方法createProgressView和createWaveView,用来初始化圆圈和水滴波浪视图并添加到容器中,
变量mIsBeingDropped,是Android系统提供的布尔数据类型的变量,用来标记是否开始下落,
定义方法onMoveTouchEvent,用来进行滑动事件监听和相关计算状态的变化动画的展示。
本发明所述的水滴下拉刷新实现方法,实现下拉波浪水滴刷新效果,算法可扩展性好,支持设置波纹和水滴的颜色、动画时间等特效,增加用户体验效果。
本发明所述的水滴下拉刷新实现方法,如图2所示,下拉顶部出现波浪形成水滴并下落刷新效果。采用自己实现的组件,只需自定义波浪水滴控件提供波浪图形和水滴的绘制,自定义图片视图ImageView提供下拉刷新的旋转圆效果,再自定义容器控件把水滴、旋转圆和数据列表控件添加到里面,对其中的事件进行监听分发处理,就实现水滴下拉刷新效果。
本发明所述的水滴下拉刷新实现方法,可应用于音乐盒推荐首页,使用波纹下拉效果后,用户下拉水滴下落,等待服务器返回数据,数据刷新后水滴效果,用户体验良好,完全可以代替现在的线条刷新动画。
附图说明
本发明有如下附图:
图1 本发明的流程图。
图2 水滴下拉刷新效果示意图。
具体实施方式
以下结合附图对本发明作进一步详细说明。
如图1、2所示,本发明所述的水滴下拉刷新实现方法,包括如下步骤:
定义并实现类WaveView,继承Android系统提供的View控件,用来绘制波浪及水滴相关特效,
定义并实现类MaterialProgressDrawable,继承Android系统提供的Drawable类,用来设置一个Material风格的圆形滚动条样式,用于设置刷新过程中的圆形滚动动画效果,
定义并实现类AnimationImageView,继承Android系统提供的图片展示控件ImageView,用来设置动画的监听操作,
定义并实现类ProgressAnimationImageView,继承自定义类AnimationImageView,用来提供旋转动画的自定义控件,
定义并实现类WaveSwipeRefreshLayout,继承Android系统提供的视图容器ViewGroup,用来放置可滑动的列表视图、带箭头的圆圈刷新视图和水滴波浪视图,用来处理相关触摸事件,对事件进行拦截和分发,用来刷新动画状态的设置、刷新接口的回调。
在上述技术方案的基础上,在类WaveView中,具体包括:
绘制波浪相关属性,包括:
变量mWavePath,是Android系统提供的Path类型的变量,用来保存上部波浪特效的路径,
绘制水滴相关属性,包括:
变量mDropCircleRadius,是Android系统提供的浮点数据类型的变量,用来定义水滴圆的半径,
变量mDropTangentPath,是Android系统提供的Path类型的变量,用来保存水滴上面的三角形的路径,
变量mDropCirclePath,是Android系统提供的Path类型的变量,用来保存水滴下面的圆的路径,
变量mDropRect,是Android系统提供的Rect类型的变量,用来保存水滴底部长方形的坐标信息,用来绘制椭圆,
绘制操作相关属性,包括:
变量mPaint,是Android系统提供的画笔Paint类型的变量,用来绘制波浪及水滴图像,
常量DROP_CIRCLE_ANIMATOR_DURATION,是Android系统提供的长整形long类型的常量,用来设置动画执行的时间,默认值为500毫秒,
重写波浪视图中的onDraw方法,用来绘制波浪图像,水滴状图像,
定义beginPhase方法用来计算下拉时的波浪曲线,appearPhase方法用来计算制波浪下拉到一定距离形成水滴的状态曲线,expandPhase方法用来计算继续下拉水滴下落时的曲线,
定义方法startDropAnimation,用来控制水滴下落时的动画效果。
例如:波浪视图中的onDraw方法可采用如下代码:
private void onDraw (Canvas canvas) {
canvas.drawPath(mWavePath, mPaint);
mDropTangentPath.moveTo(circleCenterX, vertex);
mDropTangentPath.lineTo((float) p1, (float) q);
mDropTangentPath.lineTo((float) p2, (float) q);
mDropTangentPath.close();
mDropCirclePath.addOval(mDropRect, Path.Direction.CCW);
绘制圆圈落在的部
canvas.drawPath(mDropTangentPath, mPaint);
canvas.drawPath(mDropCirclePath, mPaint);// 绘制椭圆
}。
其中:
canvas是Android系统提供的画布用来进行图像的绘制,drawPath是其中的方法用来对Path路径进行绘制,这里用来根据mWavePath绘制下拉波浪状图形。
mDropTangentPath是Android系统体用的Path类型的变量这里用来保存水滴上面三角形,moveTo是其中的方法,用来定位路径的起始坐标点,lineTo也是其中的方法用与从当前轮廓点绘制一条线段到指定坐标点,close也是Path类中的方法,用于回到初始轮廓点形成封闭的曲线。
例如:beginPhase方法、appearPhase方法、expandPhase方法可采用如下代码:
public void beginPhase(float move1) {
mWavePath.moveTo(0, 0);
mWavePath.cubicTo();
ViewCompat.postInvalidateOnAnimation(this);}
public void appearPhase(float move1, float move2) {
mWavePath.moveTo(0, 0);
mWavePath.cubicTo()}
public void expandPhase(float move1, float move2, float move3) {
mWavePath.moveTo(0, 0);
mWavePath.cubicTo()}。
其中:
beginPhase方法中的move1是Android系统提供的浮点类型的数据,保存用户下拉的距离和控件的高度的比例,来确定波浪线下拉的幅度。
appearPhase方法中的move1和move2变量用来控制波浪型下拉的角度幅度和水滴形成的状态位置信息。
mWavePath用来存储波浪线曲线,moveTo是其中的方法用来指定初始轮廓点,cubicTo是用来绘制贝塞尔曲线,ViewCompat是Android系统提供的视图相关操作的工具类,postInvalidateOnAnimation是其中的方法用来通知View控件进行视图刷新重绘。
例如:方法startDropAnimation可采用如下代码:
public void startDropAnimation() {
mDropCircleAnimator = ValueAnimator.ofFloat(500 * (mWidth / 1440.f),mMaxDropHeight);
mDropCircleAnimator.setDuration(DROP_CIRCLE_ANIMATOR_DURATION);
mDropCircleAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator animation) {
mCurrentCircleCenterY = (float) animation.getAnimatedValue();
ViewCompat.postInvalidateOnAnimation(WaveView.this); } });
mDropCircleAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
mDropCircleAnimator.start();}。
其中:
变量mDropCircleAnimator是Android系统提供的ValueAnimator属性动画类型的变量,ofFloat是其中的方法用来进行数值的发生变化,用来控制水滴下落过程的高度位置信息,setDuration是ValueAnimator属性动画中的方法,用来设置动画执行的实现信息,DROP_CIRCLE_ANIMATOR_DURATION是Android系统提供的长整形类型的常量,addUpdateListener是ValueAnimator中的方法,用来设置数值变化过程监听。
getAnimatedValue是ValueAnimator中的方法用来获取变化后的高度数据用来计算当前位置水滴的状态信息,ViewCompat是Android系统提供的用来针对不同系统版本对View进行操作的工具类,postInvalidateOnAnimation是其中的方法用来通知视图进行重新绘制刷新工作。
setInterpolator是ValueAnimator中的方法用来设置插值器,AcceleateDecelerateInterpolator是Android系统提供的开始和结束慢中间快的动画效果插值器。
start是ValueAnimator类中的方法用来启动动画。
在上述技术方案的基础上,在类MaterialProgressDrawable中,具体包括:
内部类Ring是Android系统提供的Object类型的对象,用来绘制带箭头的圆形样式,
常量ARROW_WIDTH是Android系统提供的整型类型的常量,用来设置箭头的宽度,
常量ARROW_HEIGHT是Android系统提供的整型类型的常量,用来设置箭头的高度,
常量ARROW_OFFSET_ANGLE是Android系统提供的整型类型的常量,用来设置箭头的角度,
变量mResources是Android系统提供的Resources资源类型的变量,用来获取显示器的逻辑密度,
变量mAnimation是Android系统提供的Animation动画类型的变量,用来执行圆形的旋转动画,
变量mRotationCount是Android系统提供的浮点数据类型的变量,用来设置旋转动画执行的次数,
变量mWidth和mHeight,都是Android系统提供的双精度double类型的变量,用来设置圆的大小,
变量mRotation,是Android系统提供的浮点数据类型的变量,用来记录带箭头圆旋转的角度信息,
定义方法draw,用来绘制旋转圆的动画效果。
例如:方法draw可采用如下代码:
public void draw(Canvas c) {
Rect bounds = getBounds();
int saveCount = c.save();
c.rotate(mRotation,bounds.exactCenterX(),bounds.exactCenterY());
mRing.draw(c, bounds);
c.restoreToCount(saveCount);
}。
其中:
变量c是Android系统提供的画布,getBounds方法是Android系统提供的Drawable类中的方法用来获取边界位置信息,save是Canvas类中的方法用来画布的状态,rotate是Canvas类中的方法用来对画布进行旋转,mRotation是旋转的角度bounds.exactCenterX()和bounds.exactCenterY()用来获取旋转的中心位置坐标。
mRing是定义的绘制带箭头圆形的实例draw是其中的方法用来在指定画布和位置绘制圆形,restoreToCount是Canvas类中的方法用来恢复画布之前保存的状态。
在上述技术方案的基础上,在类ProgressAnimationImageView中,具体包括:
变量mProgress,是自定义MaterialProgressDrawable类型的变量,用来提供ImageView设置的Drawable,给控件添加带箭头圆的旋转动画效果。
在上述技术方案的基础上,在类WaveSwipeRefreshLayout中,具体包括:
接口OnRefreshListener和其中的抽象方法onRefresh,用来对刷新中的状态回调,
枚举类型STATE,里面有两个状态分别是REFRESHING和PENDING,用来表示正在刷新中和准备刷新,
枚举类型EVENT_PHASE,里面有5中状态分别是WAITING等待中、BEGINNING出现波浪、APPEARING形成水滴、 EXPANDING水滴下沉、 DROPPING水滴下落,
变量mState是STATE枚举类型的变量,初始状态设置为STATE.PENDING,用来标记刷新的状态,
变量mEventPhase是EVENT_PHASE枚举类型的变量,初始值设置为EVENT_PHASE.WAITING,用来标记下拉波浪水滴不同位置的状态,
变量mTarget是Android系统提供的View类型的变量,用来获取可以滑动的列表控件,
变量mCircleView是自定义圆形旋转ProgressAnimationImageView类型的控件,
变量mWaveView是自定义波浪水滴WaveView类型的控件,用来提供波浪水滴等动画特效,
定义方法createProgressView和createWaveView,用来初始化圆圈和水滴波浪视图并添加到容器中,
变量mIsBeingDropped,是Android系统提供的布尔数据类型的变量,用来标记是否开始下落,
定义方法onMoveTouchEvent,用来进行滑动事件监听和相关计算状态的变化动画的展示。
例如:方法createProgressView和createWaveView可采用如下代码:
private void createProgressView() {
addView(mCircleView = new ProgressAnimationImageView(getContext()));
}
private void createWaveView() {
addView(mWaveView = new WaveView(getContext()), 0);
}。
其中:
addView是Android 系统提供的ViewGroup容器中的方法用来向容器中添加子视图,getContext是其中的方法用来获取上下文来创建视图控件,参数0是传入的索引告诉父控件添加子控制的索引位置。
例如:方法onMoveTouchEvent可采用如下代码:
private boolean onMoveTouchEvent(@NonNull MotionEvent event, intpointerIndex) {
if (mIsBeingDropped) {return false;}
mCircleView.showArrow(true);
mCircleView.setProgressRotation(rotation);
mCircleView.setTranslationY(mWaveView.getCurrentCircleCenterY());
if (firstBounds < VERTICAL_DRAG_THRESHOLD.FIRST.val) {
onBeginPhase(firstBounds);
} else if (firstBounds < VERTICAL_DRAG_THRESHOLD.SECOND.val) {
onAppearPhase(firstBounds, secondBounds);
} else if (firstBounds < VERTICAL_DRAG_THRESHOLD.THIRD.val) {
onExpandPhase(firstBounds, secondBounds, finalBounds);
} else {onDropPhase();}
return !mIsBeingDropped;
}。
其中:
参数event是Android系统提供MotionEvent类型传递滑动事件,pointerIndex是触摸点的索引,mIsBeingDropped是布尔类型用来判断是否开始下落。
showArrow方法是ProgressAnimationImageView类中的方法用来显示带箭头的圆,setProgressRotation也是ProgressAnimationImageView类中的方法用来设置旋转的角度,setTranslationY也是ProgressAnimationImageView中的方法用来设置下落的位置坐标信息,firstBounds用来判断下拉的程度。
onBeginPhase方法用来绘制刚开始下拉时的波浪线图形,
onAppearPhase方法用来绘制形成水滴的过程,
onExpandPhase方法用来绘制水滴下沉时的状态,
onDropPhase方法用来绘制水滴下落时的动画场景。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (3)

1.一种水滴下拉刷新实现方法,其特征在于,包括如下步骤:
定义并实现类WaveView,继承Android系统提供的View控件,用来绘制波浪及水滴相关特效,
在类WaveView中,具体包括:
绘制波浪相关属性,包括:
变量mWavePath,是Android系统提供的Path类型的变量,用来保存上部波浪特效的路径,
绘制水滴相关属性,包括:
变量mDropCircleRadius,是Android系统提供的浮点数据类型的变量,用来定义水滴圆的半径,
变量mDropTangentPath,是Android系统提供的Path类型的变量,用来保存水滴上面的三角形的路径,
变量mDropCirclePath,是Android系统提供的Path类型的变量,用来保存水滴下面的圆的路径,
变量mDropRect,是Android系统提供的Rect类型的变量,用来保存水滴底部长方形的坐标信息,用来绘制椭圆,
绘制操作相关属性,包括:
变量mPaint,是Android系统提供的画笔Paint类型的变量,用来绘制波浪及水滴图像,
常量DROP_CIRCLE_ANIMATOR_DURATION,是Android系统提供的长整形long类型的常量,用来设置动画执行的时间,默认值为500毫秒,
重写波浪视图中的onDraw方法,用来绘制波浪图像,水滴状图像,
定义beginPhase方法用来计算下拉时的波浪曲线,appearPhase方法用来计算制波浪下拉到一定距离形成水滴的状态曲线,expandPhase方法用来计算继续下拉水滴下落时的曲线,
定义方法startDropAnimation,用来控制水滴下落时的动画效果;
定义并实现类MaterialProgressDrawable,继承Android系统提供的Drawable类,用来设置一个Material风格的圆形滚动条样式,用于设置刷新过程中的圆形滚动动画效果,
定义并实现类AnimationImageView,继承Android系统提供的图片展示控件ImageView,用来设置动画的监听操作,
定义并实现类ProgressAnimationImageView,继承自定义类AnimationImageView,用来提供旋转动画的自定义控件,
定义并实现类WaveSwipeRefreshLayout,继承Android系统提供的视图容器ViewGroup,用来放置可滑动的列表视图、带箭头的圆圈刷新视图和水滴波浪视图,用来处理相关触摸事件,对事件进行拦截和分发,用来刷新动画状态的设置、刷新接口的回调;
在类WaveSwipeRefreshLayout中,具体包括:
接口OnRefreshListener和其中的抽象方法onRefresh,用来对刷新中的状态回调,
枚举类型STATE,里面有两个状态分别是REFRESHING和PENDING,用来表示正在刷新中和准备刷新,
枚举类型EVENT_PHASE,里面有5中状态分别是WAITING等待中、BEGINNING出现波浪、APPEARING形成水滴、EXPANDING水滴下沉、DROPPING水滴下落,
变量mState是STATE枚举类型的变量,初始状态设置为STATE.PENDING,用来标记刷新的状态,
变量mEventPhase是EVENT_PHASE枚举类型的变量,初始值设置为EVENT_PHASE.WAITING,用来标记下拉波浪水滴不同位置的状态,
变量mTarget是Android系统提供的View类型的变量,用来获取可以滑动的列表控件,
变量mCircleView是自定义圆形旋转ProgressAnimationImageView类型的控件,
变量mWaveView是自定义波浪水滴WaveView类型的控件,用来提供波浪水滴等动画特效,
定义方法createProgressView和createWaveView,用来初始化圆圈和水滴波浪视图并添加到容器中,
变量mIsBeingDropped,是Android系统提供的布尔数据类型的变量,用来标记是否开始下落,
定义方法onMoveTouchEvent,用来进行滑动事件监听和相关计算状态的变化动画的展示。
2.如权利要求1所述的水滴下拉刷新实现方法,其特征在于:在类MaterialProgressDrawable中,具体包括:
内部类Ring是Android系统提供的Object类型的对象,用来绘制带箭头的圆形样式,
常量ARROW_WIDTH是Android系统提供的整型类型的常量,用来设置箭头的宽度,
常量ARROW_HEIGHT是Android系统提供的整型类型的常量,用来设置箭头的高度,
常量ARROW_OFFSET_ANGLE是Android系统提供的整型类型的常量,用来设置箭头的角度,
变量mResources是Android系统提供的Resources资源类型的变量,用来获取显示器的逻辑密度,
变量mAnimation是Android系统提供的Animation动画类型的变量,用来执行圆形的旋转动画,
变量mRotationCount是Android系统提供的浮点数据类型的变量,用来设置旋转动画执行的次数,
变量mWidth和mHeight,都是Android系统提供的双精度double类型的变量,用来设置圆的大小,
变量mRotation,是Android系统提供的浮点数据类型的变量,用来记录带箭头圆旋转的角度信息,
定义方法draw,用来绘制旋转圆的动画效果。
3.如权利要求1所述的水滴下拉刷新实现方法,其特征在于:在类ProgressAnimationImageView中,具体包括:
变量mProgress,是自定义MaterialProgressDrawable类型的变量,用来提供ImageView设置的Drawable,给控件添加带箭头圆的旋转动画效果。
CN201811039919.6A 2018-09-06 2018-09-06 一种水滴下拉刷新实现方法 Active CN109308148B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811039919.6A CN109308148B (zh) 2018-09-06 2018-09-06 一种水滴下拉刷新实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811039919.6A CN109308148B (zh) 2018-09-06 2018-09-06 一种水滴下拉刷新实现方法

Publications (2)

Publication Number Publication Date
CN109308148A CN109308148A (zh) 2019-02-05
CN109308148B true CN109308148B (zh) 2022-03-04

Family

ID=65224603

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811039919.6A Active CN109308148B (zh) 2018-09-06 2018-09-06 一种水滴下拉刷新实现方法

Country Status (1)

Country Link
CN (1) CN109308148B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111208928B (zh) * 2019-12-27 2021-05-18 广东金赋科技股份有限公司 页面滚动的控制方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007280097A (ja) * 2006-04-07 2007-10-25 Nec Infrontia Corp 電子機器、履歴表示方法及びプログラム
CN104951179A (zh) * 2014-03-27 2015-09-30 腾讯科技(北京)有限公司 一种对页面进行刷新处理的方法和装置
CN107491297A (zh) * 2017-06-23 2017-12-19 北京五八信息技术有限公司 下拉刷新app界面的实现方法及装置
CN108010110A (zh) * 2017-11-24 2018-05-08 北京酷我科技有限公司 一种播放Hi-Fi音乐时的频谱效果的展示方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007280097A (ja) * 2006-04-07 2007-10-25 Nec Infrontia Corp 電子機器、履歴表示方法及びプログラム
CN104951179A (zh) * 2014-03-27 2015-09-30 腾讯科技(北京)有限公司 一种对页面进行刷新处理的方法和装置
CN107491297A (zh) * 2017-06-23 2017-12-19 北京五八信息技术有限公司 下拉刷新app界面的实现方法及装置
CN108010110A (zh) * 2017-11-24 2018-05-08 北京酷我科技有限公司 一种播放Hi-Fi音乐时的频谱效果的展示方法

Also Published As

Publication number Publication date
CN109308148A (zh) 2019-02-05

Similar Documents

Publication Publication Date Title
EP2201526B1 (en) Altering the appearance of a digital image using a shape
US20150154785A1 (en) Animating sketches via kinetic textures
US20150178977A1 (en) Rendering Vector Maps in a Geographic Information System
AU2015315608B2 (en) Layout engine
CN109308148B (zh) 一种水滴下拉刷新实现方法
US20070159497A1 (en) Rotation control
US10997770B1 (en) Automated animation of fonts
US20170017627A1 (en) Layout engine
CN101986248A (zh) 在计算机控制中使用手势对象取代菜单的方法
CN106708356B (zh) 提示标签展示方法和装置
KR101108480B1 (ko) 객체 지향적 컴포넌트 애니메이션 방법 및 이를 위한 기록매체
CN109189537A (zh) 页面信息的动态显示方法、计算设备及计算机存储介质
CN109461215A (zh) 角色插画的生成方法、装置、计算机设备及存储介质
Colubri et al. Processing for android
US10387540B2 (en) Generating a visual layout tree using caching techniques
US20170371851A9 (en) Detecting and animating a change in position of a visual layout node of a visual layout tree
US20170364482A9 (en) Generating a visual layout tree based on a named point within a visual description node
JP2001209816A5 (zh)
US20240054710A1 (en) Digital Object Animation Authoring Interfaces
US20170364483A9 (en) Generating visual layout nodes to fill a display area based on an anchor point
JP2002092639A (ja) パーティクルの挙動を表示するアニメーション生成方法および装置
US11003833B2 (en) Adding visual description nodes to a visual description tree during layout
Manning et al. IOS Swift Game Development Cookbook: Simple Solutions for Game Development Problems
CN113870384A (zh) 水滴交融效果的实现方法、系统、存储介质及其计算机设备
US20170364489A9 (en) Linking visual layout nodes of a visual layout tree using positioning pointers

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant