Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 45 additions & 24 deletions ResideMenu/src/com/special/ResideMenu/ResideMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public class ResideMenu extends FrameLayout{
private ViewGroup viewDecor;
private TouchDisableView viewActivity;
/** The flag of menu opening status. */
private boolean isOpened;
private boolean isOpened;
private float shadowAdjustScaleX;
private float shadowAdjustScaleY;
/** Views which need stop to intercept touch events. */
Expand Down Expand Up @@ -254,33 +254,42 @@ public OnMenuListener getMenuListener() {
* Show the menu;
*/
public void openMenu(int direction){
openMenu(direction, true);
}

public void openMenu(int direction, boolean withAnimations){
setScaleDirection(direction);

isOpened = true;
AnimatorSet scaleDown_activity = buildScaleDownAnimation(viewActivity, mScaleValue, mScaleValue);
AnimatorSet scaleDown_shadow = buildScaleDownAnimation(imageViewShadow,
mScaleValue + shadowAdjustScaleX, mScaleValue + shadowAdjustScaleY);
AnimatorSet alpha_menu = buildMenuAnimation(scrollViewMenu, 1.0f);
scaleDown_shadow.addListener(animationListener);
scaleDown_activity.playTogether(scaleDown_shadow);
scaleDown_activity.playTogether(alpha_menu);
scaleDown_activity.start();
int duration = withAnimations ? 250 : 0;
AnimatorSet activityScaleDown = buildScaleDownAnimation(viewActivity, mScaleValue, mScaleValue, duration);
AnimatorSet shadowScaleDown = buildScaleDownAnimation(imageViewShadow,
mScaleValue + shadowAdjustScaleX, mScaleValue + shadowAdjustScaleY, duration);
AnimatorSet menuAlpha = buildMenuAnimation(scrollViewMenu, 1.0f, duration);
shadowScaleDown.addListener(animationListener);
activityScaleDown.playTogether(shadowScaleDown);
activityScaleDown.playTogether(menuAlpha);
activityScaleDown.start();
}

/**
* Close the menu;
*/
public void closeMenu(){
closeMenu(true);
}

public void closeMenu(boolean withAnimations){

isOpened = false;
AnimatorSet scaleUp_activity = buildScaleUpAnimation(viewActivity, 1.0f, 1.0f);
AnimatorSet scaleUp_shadow = buildScaleUpAnimation(imageViewShadow, 1.0f, 1.0f);
AnimatorSet alpha_menu = buildMenuAnimation(scrollViewMenu, 0.0f);
scaleUp_activity.addListener(animationListener);
scaleUp_activity.playTogether(scaleUp_shadow);
scaleUp_activity.playTogether(alpha_menu);
scaleUp_activity.start();
int duration = withAnimations ? 250 : 0;
AnimatorSet activityScaleUp = buildScaleUpAnimation(viewActivity, 1.0f, 1.0f, duration);
AnimatorSet shadowScaleUp = buildScaleUpAnimation(imageViewShadow, 1.0f, 1.0f, duration);
AnimatorSet alpha_menu = buildMenuAnimation(scrollViewMenu, 0.0f, duration);
activityScaleUp.addListener(animationListener);
activityScaleUp.playTogether(shadowScaleUp);
activityScaleUp.playTogether(alpha_menu);
activityScaleUp.start();
}

@Deprecated
Expand Down Expand Up @@ -318,14 +327,23 @@ private void setScaleDirection(int direction){
}

/**
* return the flag of menu status;
* Return the flag of menu status;
*
* @return
*/
public boolean isOpened() {
return isOpened;
}

/**
* Return the current opening direction of menu.
*
* @return
*/
public int getCurrentDirection() {
return scaleDirection;
}

private OnClickListener viewActivityOnClickListener = new OnClickListener() {
@Override
public void onClick(View view) {
Expand All @@ -345,7 +363,7 @@ public void onAnimationStart(Animator animation) {

@Override
public void onAnimationEnd(Animator animation) {
// reset the view;
// Reset the view;
if(isOpened()){
viewActivity.setTouchDisable(true);
viewActivity.setOnClickListener(viewActivityOnClickListener);
Expand Down Expand Up @@ -378,7 +396,8 @@ public void onAnimationRepeat(Animator animation) {
* @param targetScaleY
* @return
*/
private AnimatorSet buildScaleDownAnimation(View target,float targetScaleX,float targetScaleY){
private AnimatorSet buildScaleDownAnimation(
View target,float targetScaleX, float targetScaleY, int duration){

AnimatorSet scaleDown = new AnimatorSet();
scaleDown.playTogether(
Expand All @@ -388,7 +407,7 @@ private AnimatorSet buildScaleDownAnimation(View target,float targetScaleX,float

scaleDown.setInterpolator(AnimationUtils.loadInterpolator(activity,
android.R.anim.decelerate_interpolator));
scaleDown.setDuration(250);
scaleDown.setDuration(duration);
return scaleDown;
}

Expand All @@ -400,26 +419,27 @@ private AnimatorSet buildScaleDownAnimation(View target,float targetScaleX,float
* @param targetScaleY
* @return
*/
private AnimatorSet buildScaleUpAnimation(View target,float targetScaleX,float targetScaleY){
private AnimatorSet buildScaleUpAnimation(
View target,float targetScaleX,float targetScaleY, int duration){

AnimatorSet scaleUp = new AnimatorSet();
scaleUp.playTogether(
ObjectAnimator.ofFloat(target, "scaleX", targetScaleX),
ObjectAnimator.ofFloat(target, "scaleY", targetScaleY)
);

scaleUp.setDuration(250);
scaleUp.setDuration(duration);
return scaleUp;
}

private AnimatorSet buildMenuAnimation(View target, float alpha){
private AnimatorSet buildMenuAnimation(View target, float alpha, int duration){

AnimatorSet alphaAnimation = new AnimatorSet();
alphaAnimation.playTogether(
ObjectAnimator.ofFloat(target, "alpha", alpha)
);

alphaAnimation.setDuration(250);
alphaAnimation.setDuration(duration);
return alphaAnimation;
}

Expand Down Expand Up @@ -600,4 +620,5 @@ private void hideScrollViewMenu(ScrollView scrollViewMenu){
removeView(scrollViewMenu);
}
}

}
26 changes: 21 additions & 5 deletions ResideMenuDemo/src/com/special/ResideMenuDemo/MenuActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public class MenuActivity extends FragmentActivity implements View.OnClickListen
private ResideMenuItem itemProfile;
private ResideMenuItem itemCalendar;
private ResideMenuItem itemSettings;
private static final String MENU_STATE = "MenuActivity.MENU_STATE";
private static final String MENU_DIRECTION = "MenuActivity.MENU_DIRECTION";

/**
* Called when the activity is first created.
Expand All @@ -27,19 +29,20 @@ public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mContext = this;
setUpMenu();
if( savedInstanceState == null )
setUpMenu(savedInstanceState);
if( savedInstanceState == null ) {
changeFragment(new HomeFragment());
}
}

private void setUpMenu() {

private void setUpMenu(Bundle savedInstanceState) {

// attach to current activity;
resideMenu = new ResideMenu(this);
resideMenu.setBackground(R.drawable.menu_background);
resideMenu.attachToActivity(this);
resideMenu.setMenuListener(menuListener);
//valid scale factor is between 0.0f and 1.0f. leftmenu'width is 150dip.
resideMenu.setScaleValue(0.6f);

// create menu items;
Expand Down Expand Up @@ -73,6 +76,11 @@ public void onClick(View view) {
resideMenu.openMenu(ResideMenu.DIRECTION_RIGHT);
}
});

// Restore the menu state by savedInstanceState.
if ( savedInstanceState != null && savedInstanceState.getBoolean(MENU_STATE) == true ) {
resideMenu.openMenu(savedInstanceState.getInt(MENU_DIRECTION));
}
}

@Override
Expand Down Expand Up @@ -117,8 +125,16 @@ private void changeFragment(Fragment targetFragment){
.commit();
}

// What good method is to access resideMenu?
public ResideMenu getResideMenu(){
return resideMenu;
}

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (resideMenu != null) {
outState.putBoolean(MENU_STATE, resideMenu.isOpened());
outState.putInt(MENU_DIRECTION, resideMenu.getCurrentDirection());
}
}
}