(点击
上方公众号
,可快速关注)
来源:伯乐在线专栏作者 - joe
链接:http://android.jobbole.com/85137/
点击 → 了解如何加入专栏作者
接
上文
拖拽背景渐变效果
说到背景的渐变效果,那么肯定就是要讲相关的回调了!Callbacks用来处理对应的回调,提供了三个方法:onSheetNarrowed(),onSheetExpanded(),onSheetPositionChanged(),分别对应的时候关闭了,展开了,和改变了三种情况。
在onSheetPositionChanged(int sheetTop, float currentX, int dy, boolean userInteracted)的方法中,有四个参数,分别是当前的top值,当前touch的x值,竖直方向的改变值,以及是否是由开到关或者由关到开的情况。
public
static
abstract
class
Callbacks
{
public
void
onSheetNarrowed
()
{
}
public
void
onSheetExpanded
()
{
}
public
void
onSheetPositionChanged
(
int
sheetTop
,
float
currentX
,
int
dy
,
boolean
userInteracted
)
{
}
}
public
void
registerCallback
(
Callbacks
callback
)
{
if
(
callbacks
==
null
)
{
callbacks
=
new
CopyOnWriteArrayList
();
}
callbacks
.
add
(
callback
);
}
public
void
unregisterCallback
(
Callbacks
callback
)
{
if
(
callbacks
!=
null
&& !
callbacks
.
isEmpty
())
{
callbacks
.
remove
(
callback
);
}
}
在具体是实现中是这样的:
mBoottom
.
registerCallback
(
new
CurveLayout
.
Callbacks
()
{
private
int
dy
;
@
Override
public
void
onSheetExpanded
()
{
Log
.
e
(
TAG
,
"onSheetExpanded: "
);
mCurveView
.
onDispatchUp
();
mCurveView
.
setTranslationY
(
0
);
mCurveView
.
setVisibility
(
View
.
GONE
);
mTab
.
setTranslationY
(
-
mCurveView
.
getHeight
());
mTab
.
setVisibility
(
View
.
VISIBLE
);
mCurveView
.
setScaleX
(
1.f
);
mCurveView
.
setScaleY
(
1.f
);
mViewPager
.
setScrollable
(
true
);
dy
=
0
;
}
@
Override
public
void
onSheetNarrowed
()
{
Log
.
e
(
TAG
,
"onSheetNarrowed: "
);
mCurveView
.
onDispatchUp
();
mCurveView
.
setTranslationY
(
0
);
mCurveView
.
setScaleX
(
1.f
);
mCurveView
.
setScaleY
(
1.f
);
mTab
.
setVisibility
(
View
.
GONE
);
mViewPager
.
setScrollable
(
false
);
mCurveView
.
setVisibility
(
View
.
VISIBLE
);
dy
=
0
;
}
@
Override
public
void
onSheetPositionChanged
(
int
sheetTop
,
float
currentX
,
int
ddy
,
boolean
reverse
)
{
if
(
mCurveViewHeight
==
0
)
{
mCurveViewHeight
=
mCurveView
.
getHeight
();
mBoottom
.
setDismissOffset
(
mCurveViewHeight
);
}
this
.
dy
+=
ddy
;
float
fraction
=
1
-
sheetTop *
1.0f
/
mCurveViewHeight
;
if
(
!
reverse
)
{
if
(
fraction
>=
0
&& !
mBoottom
.
isExpanded
())
{
//向上拉
mTab
.
setVisibility
(
View
.
VISIBLE
);
mBoottom
.
setExpandTopOffset
(
mTab
.
getHeight
());
mCurveView
.
setTranslationY
(
dy *
0.2f
);
mTab
.
setTranslationY
(
-
fraction *
(
mCurveView
.
getHeight
()