Android Open Source - Common-Library Slide Up Open 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  w  w  . ja v a  2 s  . c om
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.animation.BounceInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.Scroller;

import com.morgan.library.R;

/**
 * ????????????????????View,???????????????????????ImageView?
 * 
 * @author Morgan.Ji
 * 
 */
public class SlideUpOpenWidget extends LinearLayout {

  private static final int DEFAULT_MINIMUM_VELOCITY = 2000;
  private static final int DEFAULT_ANIMATION_TIME = 800;
  private float mUpPercent = 0.5f;
  private float mStartY, mTempY;
  private Scroller mScroller;
  private boolean mMovable, mGone;
  private ImageView mImageView;
  private Context mContext;
  private OnSlidePageGoneListener mSlidePageGoneListener;
  private VelocityTracker mVelocityTracker;
  private float mMaximumVelocity;
  private int mMinimumVelocity;

  public SlideUpOpenWidget(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.mContext = context;
    TypedArray ta = context.obtainStyledAttributes(attrs,
        R.styleable.SlideUpOpenWidget);
    mScroller = new Scroller(context, new BounceInterpolator());
    mImageView = new ImageView(context);
    int imageResource = ta.getResourceId(
        R.styleable.SlideUpOpenWidget_coverImage, -1);
    if (imageResource != -1) {
      mImageView.setImageResource(imageResource);
    } else {
      this.setVisibility(View.GONE);
    }
    mImageView.setScaleType(ScaleType.FIT_XY);
    mImageView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
        LayoutParams.MATCH_PARENT));
    this.addView(mImageView);
    ta.recycle();
    final ViewConfiguration configuration = ViewConfiguration.get(context);
    mMinimumVelocity = DEFAULT_MINIMUM_VELOCITY;
    mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    obtainVelocityTracker(event);
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
      if (!mScroller.isFinished()) {
        mScroller.abortAnimation();
      }
      mStartY = event.getY();
      break;
    case MotionEvent.ACTION_MOVE:
      mTempY = event.getY();
      if (mTempY < mStartY) {
        mMovable = true;
      } else {
        mStartY = mTempY;
      }
      if (mMovable) {
        scrollTo(0, (int) (mStartY - mTempY));
      }
      break;
    case MotionEvent.ACTION_UP:
      if (mMovable) {
        mMovable = false;
        final VelocityTracker velocityTracker = mVelocityTracker;
        velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
        int initialVelocity = (int) velocityTracker.getYVelocity();
        if ((Math.abs(initialVelocity) > mMinimumVelocity)
            && getChildCount() > 0) {
          mScroller = new Scroller(mContext,
              new DecelerateInterpolator());
          mScroller.startScroll(0, (int) (mStartY - mTempY), 0,
              (int) (getHeight() - (mStartY - mTempY)),
              DEFAULT_ANIMATION_TIME);
          invalidate();
          mGone = true;
        } else {
          mTempY = event.getY();
          if ((mStartY - mTempY) > getHeight() * mUpPercent) {
            mScroller = new Scroller(mContext,
                new DecelerateInterpolator());
            mScroller.startScroll(0, (int) (mStartY - mTempY), 0,
                (int) (getHeight() - (mStartY - mTempY)),
                DEFAULT_ANIMATION_TIME);
            invalidate();
            mGone = true;
          } else {
            mScroller.startScroll(0, (int) (mStartY - mTempY), 0,
                (int) (mTempY - mStartY),
                DEFAULT_ANIMATION_TIME);
            invalidate();
          }
        }
      }
      releaseVelocityTracker();
      break;
    default:
      break;
    }
    return true;
  }

  @Override
  public void computeScroll() {
    if (!mScroller.isFinished()) {
      if (mScroller.computeScrollOffset()) {
        int oldY = getScrollY();
        int y = mScroller.getCurrY();
        if (oldY != y) {
          scrollTo(0, y);
        }
        invalidate();
        return;
      }
    } else {
      if (mGone) {
        this.setVisibility(View.GONE);
        if (null != mSlidePageGoneListener) {
          mSlidePageGoneListener.onSlidePageGone();
        }
      }
    }
  }

  public interface OnSlidePageGoneListener {
    public void onSlidePageGone();
  }

  public void setOnSlidePageGoneListener(
      OnSlidePageGoneListener mSlidePageGoneListener) {
    this.mSlidePageGoneListener = mSlidePageGoneListener;
  }

  private void obtainVelocityTracker(MotionEvent event) {
    if (mVelocityTracker == null) {
      mVelocityTracker = VelocityTracker.obtain();
    }
    mVelocityTracker.addMovement(event);
  }

  private void releaseVelocityTracker() {
    if (mVelocityTracker != null) {
      mVelocityTracker.recycle();
      mVelocityTracker = null;
    }
  }
}




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