Add sign in scene
This commit is contained in:
1 parent
3c3dd4a7e2
commit
08d0794fe8
15 files changed
+495
-47
No files matched your search
@@ -0,0 +1,165 @@
|
||||
/*
|
||||
* Copyright (C) 2015 Hippo Seven
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.hippo.scene;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.animation.PropertyValuesHolder;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver;
|
||||
|
||||
import com.hippo.animation.SimpleAnimatorListener;
|
||||
import com.hippo.util.AnimationUtils;
|
||||
import com.hippo.util.AssertUtils;
|
||||
import com.hippo.util.ViewUtils;
|
||||
|
||||
public class SimpleCurtain extends Curtain {
|
||||
|
||||
private static long ANIMATE_TIME = 300L;
|
||||
|
||||
public static final int DIRECTION_LEFT = 0;
|
||||
public static final int DIRECTION_TOP = 1;
|
||||
public static final int DIRECTION_RIGHT = 2;
|
||||
public static final int DIRECTION_BOTTOM = 3;
|
||||
|
||||
private int mDirection;
|
||||
|
||||
private Animator mAnimator;
|
||||
|
||||
public SimpleCurtain(int direction) {
|
||||
mDirection = direction;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open(@NonNull final Scene enter, @NonNull final Scene exit) {
|
||||
final View enterSceneView = enter.getSceneView();
|
||||
AssertUtils.assertNotNull("Enter scene view must not be null.", enterSceneView);
|
||||
|
||||
ViewUtils.setVisibility(enterSceneView, View.INVISIBLE);
|
||||
|
||||
enterSceneView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||
@Override
|
||||
public void onGlobalLayout() {
|
||||
ViewUtils.removeOnGlobalLayoutListener(enterSceneView.getViewTreeObserver(), this);
|
||||
|
||||
int width = enterSceneView.getWidth();
|
||||
int height = enterSceneView.getHeight();
|
||||
float translationX = 0f;
|
||||
float translationY = 0f;
|
||||
switch (mDirection) {
|
||||
case DIRECTION_LEFT:
|
||||
translationX = -width;
|
||||
break;
|
||||
case DIRECTION_TOP:
|
||||
translationY = -height;
|
||||
break;
|
||||
case DIRECTION_RIGHT:
|
||||
translationX = width;
|
||||
break;
|
||||
default:
|
||||
case DIRECTION_BOTTOM:
|
||||
translationY = height;
|
||||
break;
|
||||
}
|
||||
PropertyValuesHolder pvh;
|
||||
if (translationX != 0f) {
|
||||
pvh = PropertyValuesHolder.ofFloat("translationX", translationX, 0f);
|
||||
} else {
|
||||
pvh = PropertyValuesHolder.ofFloat("translationY", translationY, 0f);
|
||||
}
|
||||
Animator animator = ObjectAnimator.ofPropertyValuesHolder(enterSceneView, pvh);
|
||||
animator.setDuration(ANIMATE_TIME);
|
||||
animator.setInterpolator(AnimationUtils.FAST_SLOW_INTERPOLATOR);
|
||||
animator.addListener(new SimpleAnimatorListener() {
|
||||
@Override
|
||||
public void onAnimationStart(Animator animation) {
|
||||
ViewUtils.setVisibility(enterSceneView, View.VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation, boolean canceled) {
|
||||
super.onAnimationEnd(animation, canceled);
|
||||
dispatchOpenFinished(enter, exit);
|
||||
hideSceneOnOpen(exit);
|
||||
mAnimator = null;
|
||||
}
|
||||
});
|
||||
animator.start();
|
||||
mAnimator = animator;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close(@NonNull final Scene enter, @NonNull final Scene exit) {
|
||||
showSceneOnClose(enter);
|
||||
|
||||
final View exitSceneView = exit.getSceneView();
|
||||
AssertUtils.assertNotNull("Exit scene view must not be null.", exitSceneView);
|
||||
|
||||
int width = exitSceneView.getWidth();
|
||||
int height = exitSceneView.getHeight();
|
||||
float translationX = 0f;
|
||||
float translationY = 0f;
|
||||
switch (mDirection) {
|
||||
case DIRECTION_LEFT:
|
||||
translationX = -width;
|
||||
break;
|
||||
case DIRECTION_TOP:
|
||||
translationY = -height;
|
||||
break;
|
||||
case DIRECTION_RIGHT:
|
||||
translationX = width;
|
||||
break;
|
||||
default:
|
||||
case DIRECTION_BOTTOM:
|
||||
translationY = height;
|
||||
break;
|
||||
}
|
||||
PropertyValuesHolder pvh;
|
||||
if (translationX != 0f) {
|
||||
pvh = PropertyValuesHolder.ofFloat("translationX", 0f, translationX);
|
||||
} else {
|
||||
pvh = PropertyValuesHolder.ofFloat("translationY", 0f, translationY);
|
||||
}
|
||||
Animator animator = ObjectAnimator.ofPropertyValuesHolder(exitSceneView, pvh);
|
||||
animator.setDuration(ANIMATE_TIME);
|
||||
animator.setInterpolator(AnimationUtils.SLOW_FAST_INTERPOLATOR);
|
||||
animator.addListener(new SimpleAnimatorListener() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation, boolean canceled) {
|
||||
super.onAnimationEnd(animation, canceled);
|
||||
dispatchCloseFinished(enter, exit);
|
||||
mAnimator = null;
|
||||
}
|
||||
});
|
||||
animator.start();
|
||||
mAnimator = animator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endAnimation() {
|
||||
if (mAnimator != null) {
|
||||
mAnimator.end();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInAnimation() {
|
||||
return mAnimator != null;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user