Skip to content

Commit dcb49cb

Browse files
committed
add hover control functions
1 parent af30731 commit dcb49cb

File tree

1 file changed

+88
-32
lines changed

1 file changed

+88
-32
lines changed

library/src/main/java/com/daimajia/androidviewhover/BlurLayout.java

Lines changed: 88 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@ public class BlurLayout extends RelativeLayout {
6060

6161
private long mBlurDuration = DURATION;
6262

63+
public enum HOVER_STATUS {
64+
APPEARING, APPEARED, DISAPPEARING, DISAPPEARED
65+
};
66+
67+
private HOVER_STATUS mHoverStatus = HOVER_STATUS.DISAPPEARED;
68+
6369
public BlurLayout(Context context) {
6470
super(context);
6571
}
@@ -72,7 +78,6 @@ public BlurLayout(Context context, AttributeSet attrs, int defStyle) {
7278
super(context, attrs, defStyle);
7379
}
7480

75-
7681
@Override
7782
public boolean onTouchEvent(MotionEvent event) {
7883
return gestureDetector.onTouchEvent(event);
@@ -89,41 +94,85 @@ public boolean onDown(MotionEvent e) {
8994

9095
@Override
9196
public boolean onSingleTapUp(MotionEvent e) {
92-
if(mHoverView != null){
97+
if(hover())
98+
return true;
99+
else
100+
return super.onSingleTapConfirmed(e);
101+
}
102+
};
103+
104+
public void showHover(){
105+
hover();
106+
}
93107

94-
if(!mPlayingAnimators.isEmpty()) return true;
108+
/**
109+
* Let hover show.
110+
* @return
111+
*/
112+
private boolean hover(){
113+
if(mHoverView == null) return false;
95114

96-
removeView(mBlurImage);
97-
if(enableBlurBackground)
98-
addBlurImage();
115+
if(getHoverStatus() != HOVER_STATUS.DISAPPEARED || !mPlayingAnimators.isEmpty()) return true;
99116

100-
if(mHoverView.getParent() != null){
101-
((ViewGroup)(mHoverView.getParent())).removeView(mHoverView);
102-
}
117+
removeView(mBlurImage);
118+
if(enableBlurBackground)
119+
addBlurImage();
120+
121+
if(mHoverView.getParent() != null){
122+
((ViewGroup)(mHoverView.getParent())).removeView(mHoverView);
123+
}
103124

104-
addView(mHoverView, getFullParentSizeLayoutParams());
125+
addView(mHoverView, getFullParentSizeLayoutParams());
105126

106-
mHoverView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
107-
@Override
108-
public void onGlobalLayout() {
127+
mHoverView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
128+
@Override
129+
public void onGlobalLayout() {
109130

110-
startBlurImageAppearAnimator();
131+
startBlurImageAppearAnimator();
111132

112-
startHoverAppearAnimator();
133+
startHoverAppearAnimator();
113134

114-
startChildrenAppearAnimations();
135+
startChildrenAppearAnimations();
115136

116-
if(Build.VERSION.SDK_INT >= 16)
117-
mHoverView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
118-
else
119-
mHoverView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
120-
}
121-
});
122-
return true;
137+
if(Build.VERSION.SDK_INT >= 16)
138+
mHoverView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
139+
else
140+
mHoverView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
123141
}
124-
return super.onSingleTapConfirmed(e);
125-
}
126-
};
142+
});
143+
return true;
144+
145+
}
146+
147+
/**
148+
* Let hover view dismiss.
149+
* Notice: only when hover view status is appeared, then, this may work.
150+
*/
151+
public void dismissHover(){
152+
if(getHoverStatus() != HOVER_STATUS.APPEARED || !mPlayingAnimators.isEmpty())
153+
return;
154+
155+
startBlurImageDisappearAnimator();
156+
157+
startHoverDisappearAnimator();
158+
159+
startChildrenDisappearAnimations();
160+
}
161+
162+
public void toggleHover(){
163+
if(getHoverStatus() == HOVER_STATUS.DISAPPEARED)
164+
showHover();
165+
else if(getHoverStatus() == HOVER_STATUS.APPEARED)
166+
dismissHover();
167+
}
168+
169+
/**
170+
* get currently hover status.
171+
* @return
172+
*/
173+
public HOVER_STATUS getHoverStatus(){
174+
return mHoverStatus;
175+
}
127176

128177
private void addBlurImage(){
129178
Bitmap bm = Blur.apply(getContext(), Util.getViewBitmap(this));
@@ -133,11 +182,19 @@ private void addBlurImage(){
133182
this.addView(im);
134183
}
135184

185+
/**
186+
* set background blur duration.
187+
* @param duration
188+
*/
136189
public void setBlurDuration(long duration){
137190
if(duration > 100)
138191
mBlurDuration = duration;
139192
}
140193

194+
/**
195+
* bind a hover view with BlurLayout.
196+
* @param hover
197+
*/
141198
public void setHoverView(final View hover){
142199
mHoverView = hover;
143200

@@ -150,13 +207,8 @@ public void setHoverView(final View hover){
150207
@Override
151208
public void onClick(View v) {
152209

153-
if(!mPlayingAnimators.isEmpty()) return;
154-
155-
startBlurImageDisappearAnimator();
156-
157-
startHoverDisappearAnimator();
210+
dismissHover();
158211

159-
startChildrenDisappearAnimations();
160212
}
161213
});
162214
}
@@ -291,6 +343,7 @@ public void removeDisappearListener(DisappearListener l){
291343
public void onAnimationStart(Animator animation) {
292344
mAppearingAnimators.add(animation);
293345
if(mAppearingAnimators.size() == 1){
346+
mHoverStatus = HOVER_STATUS.APPEARING;
294347
for(AppearListener l : mAppearListeners){
295348
l.onStart();
296349
}
@@ -301,6 +354,7 @@ public void onAnimationStart(Animator animation) {
301354
public void onAnimationEnd(Animator animation) {
302355
mAppearingAnimators.remove(animation);
303356
if(mAppearListeners.isEmpty()){
357+
mHoverStatus = HOVER_STATUS.APPEARED;
304358
for(AppearListener l : mAppearListeners){
305359
l.onEnd();
306360
}
@@ -324,6 +378,7 @@ public void onAnimationStart(Animator animation) {
324378
mDisappearingAnimators.add(animation);
325379
if(mDisappearListeners.size() == 1){
326380
for(DisappearListener l : mDisappearListeners){
381+
mHoverStatus = HOVER_STATUS.DISAPPEARING;
327382
l.onStart();
328383
}
329384
}
@@ -333,6 +388,7 @@ public void onAnimationStart(Animator animation) {
333388
public void onAnimationEnd(Animator animation) {
334389
mDisappearingAnimators.remove(animation);
335390
if(mPlayingAnimators.isEmpty()){
391+
mHoverStatus = HOVER_STATUS.DISAPPEARED;
336392
removeView(mBlurImage);
337393
removeView(mHoverView);
338394
for(DisappearListener l : mDisappearListeners){

0 commit comments

Comments
 (0)