Android Open Source - Common-Library Auto Hide Menu Widget






From Project

Back to project page Common-Library.

License

The source code is released under:

Apache License

If you think the Android project Common-Library listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.morgan.library.widget;
//from  w ww  .  j  av a 2  s  .c om
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.FrameLayout;
import android.widget.LinearLayout;

import com.morgan.library.R;
import com.morgan.library.widget.DirectionScrollView.OnScrollDirectionChangeListener;

/**
 * ?????????ScrollView?????????????????????????????widget?????????id?ScrollView?
 * {@link DirectionScrollView} ???id?menu_container?GroupView.
 * 
 * @author Morgan.Ji
 * 
 */
public class AutoHideMenuWidget extends FrameLayout {

  private DirectionScrollView mScrollView;
  private TranslateAnimation mShowAnimation, mHideAnimation;
  private boolean mMoving, mShowAfterHide;
  private LinearLayout mMenuContainer;
  private OnTouchListener mOnTouchListenerDegelate;

  public AutoHideMenuWidget(Context context, AttributeSet attrs) {
    super(context, attrs);
    initView();
    initAnimatition();
  }

  private void initView() {
    mScrollView = (DirectionScrollView) findViewById(R.id.scrollview);
    mMenuContainer = (LinearLayout) findViewById(R.id.menu_container);
    if (null == mScrollView || null == mMenuContainer) {
      throw new RuntimeException(
          "must include scrollview and menu_container in this view");
    }
    mScrollView.setOnTouchListener(mOnTouchListener);
    mScrollView
        .setOnScrollDirectionChangeListener(mScrollDirectionChangeListener);
  }

  private void initAnimatition() {
    mShowAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0,
        Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1,
        Animation.RELATIVE_TO_SELF, 0);
    mShowAnimation.setDuration(600);
    mShowAnimation.setInterpolator(new DecelerateInterpolator());
    mShowAnimation.setAnimationListener(new AnimationListener() {

      @Override
      public void onAnimationStart(Animation animation) {
        mMenuContainer.setVisibility(View.VISIBLE);
        mMoving = true;
        mShowAfterHide = false;
      }

      @Override
      public void onAnimationRepeat(Animation animation) {
      }

      @Override
      public void onAnimationEnd(Animation animation) {
        mMoving = false;
        mShowAfterHide = false;
      }
    });

    mHideAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0,
        Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
        Animation.RELATIVE_TO_SELF, 1);
    mHideAnimation.setDuration(400);
    mHideAnimation.setInterpolator(new AccelerateInterpolator(1.5f));
    mHideAnimation.setAnimationListener(new AnimationListener() {

      @Override
      public void onAnimationStart(Animation animation) {
        mMoving = true;
      }

      @Override
      public void onAnimationRepeat(Animation animation) {
      }

      @Override
      public void onAnimationEnd(Animation animation) {
        mMenuContainer.setVisibility(View.GONE);
        mMoving = false;
        if (mShowAfterHide) {
          toggleBottomBtn(true);
        }
      }
    });
  }

  private void toggleBottomBtn(boolean show) {
    if (mMoving) {
      if (show) {
        mShowAfterHide = true;
      }
      return;
    }
    if (show && !mMenuContainer.isShown()) {
      mMoving = true;
      mMenuContainer.postDelayed(new Runnable() {

        @Override
        public void run() {
          mMenuContainer.startAnimation(mShowAnimation);
        }
      }, 1000);
    } else if (!show && mMenuContainer.isShown()) {
      mMenuContainer.startAnimation(mHideAnimation);
    }
  }

  private OnTouchListener mOnTouchListener = new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
      boolean result = false;
      if (null != mOnTouchListenerDegelate) {
        result = mOnTouchListenerDegelate.onTouch(v, event);
      }
      switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        mScrollView.setRecord(true);
        break;
      case MotionEvent.ACTION_MOVE:
        break;
      case MotionEvent.ACTION_UP:
      case MotionEvent.ACTION_CANCEL:
        mScrollView.setRecord(false);
        toggleBottomBtn(true);
        break;
      default:
        break;
      }
      return result;
    }
  };

  private OnScrollDirectionChangeListener mScrollDirectionChangeListener = new OnScrollDirectionChangeListener() {

    @Override
    public void onDirectionChange(int direction) {
      switch (direction) {
      case DirectionScrollView.DIRECTION_DOWN:
        toggleBottomBtn(false);
        break;
      default:
        break;
      }
    }
  };

  public void setOnTouchListener(OnTouchListener mOnTouchListener) {
    this.mOnTouchListenerDegelate = mOnTouchListener;
  }
}




Java Source Code List

com.morgan.library.app.APPContext.java
com.morgan.library.app.AppManager.java
com.morgan.library.app.BaseActivity.java
com.morgan.library.app.BaseFragmentActivity.java
com.morgan.library.app.BaseListActivity.java
com.morgan.library.app.BaseScreenShotActivity.java
com.morgan.library.app.CommonApplication.java
com.morgan.library.async.CustomAsyncTask.java
com.morgan.library.async.Destroyable.java
com.morgan.library.async.IFeedback.java
com.morgan.library.async.TaskManager.java
com.morgan.library.model.NetResult.java
com.morgan.library.model.SpinnerItem.java
com.morgan.library.model.WeatherType.java
com.morgan.library.model.Weather.java
com.morgan.library.net.ApiClient.java
com.morgan.library.net.ApiManager.java
com.morgan.library.net.ApiUrl.java
com.morgan.library.net.IApiClient.java
com.morgan.library.net.JsonUtils.java
com.morgan.library.net.MockApiClient.java
com.morgan.library.service.LocationManager.java
com.morgan.library.service.WeatherManager.java
com.morgan.library.snippet.CookieShare.java
com.morgan.library.snippet.CustomService.java
com.morgan.library.snippet.ExceptionCatcher.java
com.morgan.library.snippet.ProxyUsage.java
com.morgan.library.snippet.SocketClient.java
com.morgan.library.snippet.SocketServer.java
com.morgan.library.snippet.UDPClient.java
com.morgan.library.snippet.UDPServer.java
com.morgan.library.snippet.XMLAnalyze.java
com.morgan.library.task.GetWeatherTask.java
com.morgan.library.utils.AppUtils.java
com.morgan.library.utils.DateUtils.java
com.morgan.library.utils.DensityUtils.java
com.morgan.library.utils.FileUtils.java
com.morgan.library.utils.GB2Alpha.java
com.morgan.library.utils.HttpClientUtil.java
com.morgan.library.utils.HttpClientUtils.java
com.morgan.library.utils.HttpURLUtil.java
com.morgan.library.utils.ImageUtils.java
com.morgan.library.utils.KeyBoardUtils.java
com.morgan.library.utils.LocationUtils.java
com.morgan.library.utils.Logger.java
com.morgan.library.utils.NetUtils.java
com.morgan.library.utils.PhoneUtils.java
com.morgan.library.utils.SDCardUtils.java
com.morgan.library.utils.StrUtils.java
com.morgan.library.widget.AutoHideMenuWidget.java
com.morgan.library.widget.BadgeView.java
com.morgan.library.widget.CityPickerWidget.java
com.morgan.library.widget.CustomGridView.java
com.morgan.library.widget.CustomListView.java
com.morgan.library.widget.CustomToast.java
com.morgan.library.widget.CustomViewPager.java
com.morgan.library.widget.DatePickerWidget.java
com.morgan.library.widget.DirectionScrollView.java
com.morgan.library.widget.FallBallView.java
com.morgan.library.widget.HeightPickerWidget.java
com.morgan.library.widget.InterceptPressLayout.java
com.morgan.library.widget.ItalicTextView.java
com.morgan.library.widget.PopupMenuWidget.java
com.morgan.library.widget.PullToRefreshListView.java
com.morgan.library.widget.ScreenShotView.java
com.morgan.library.widget.SexPickerWidget.java
com.morgan.library.widget.SlideUpOpenWidget.java
com.morgan.library.widget.SwipeListView.java
com.morgan.library.widget.TimePickerWidget.java
com.morgan.library.widget.TouchZoomImageView.java
com.morgan.library.widget.WaitScreenWidget.java
com.morgan.library.widget.WebViewDialog.java
com.morgan.library.widget.WeightPickerWidget.java
com.morgan.library.widget.calendar.CalendarGridView.java
com.morgan.library.widget.calendar.CalendarScrollView.java
com.morgan.library.widget.calendar.CalendarViewFlipper.java
com.morgan.library.widget.calendar.CalendarWidget.java
com.morgan.library.widget.numberpicker.NumberPicker.java
com.morgan.library.widget.numberpicker.Scroller.java
com.morgan.library.widget.slidemenu.ScrollDetectorFactory.java
com.morgan.library.widget.slidemenu.ScrollDetectors.java
com.morgan.library.widget.slidemenu.SlideMenu.java