package com.zhulin.android.atools;    import android.content.Context;  import android.util.AttributeSet;  import android.util.Log;  import android.view.MotionEvent;  import android.view.VelocityTracker;  import android.view.View;  import android.view.ViewGroup;  import android.view.animation.Interpolator;  import android.widget.Scroller;  import android.widget.Toast;    public class VerticalPager extends ViewGroup{        private Scroller mScroller;      private Context mContext;      public VerticalPager(Context context, AttributeSet attrs) {          super(context, attrs);          this.mContext=context;          mScroller=new Scroller(context);  //      mScroller=new Scroller(mContext, new Interpolator() {  //            //          @Override  //          public float getInterpolation(float input) {  //              return 300;  //          }  //      });                }        @Override      protected void onLayout(boolean changed, int l, int t, int r, int b) {          int totalHeight=0;          int count=getChildCount();            for(int i=0;i<count;i++){              View childView=getChildAt(i);                //          int measureHeight=childView.getMeasuredHeight();              //          int measureWidth=childView.getMeasuredWidth();                childView.layout(l, totalHeight, r, totalHeight+b);                totalHeight+=b;          }      }        private VelocityTracker mVelocityTracker;        @Override      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {          int width=MeasureSpec.getSize(widthMeasureSpec);          int height=MeasureSpec.getSize(heightMeasureSpec);              int count=getChildCount();          for(int i=0;i<count;i++){              getChildAt(i).measure(width, height);          }          setMeasuredDimension(width, height);      }          private int mLastMotionY;      @Override      public boolean onTouchEvent(MotionEvent event) {          if(mVelocityTracker==null){              mVelocityTracker=VelocityTracker.obtain();          }          mVelocityTracker.addMovement(event);            int action=event.getAction();            float y=event.getY();            switch(action){          case MotionEvent.ACTION_DOWN:              if(!mScroller.isFinished()){                  mScroller.abortAnimation();              }              mLastMotionY=(int) y;                            Log.d("montion", ""+getScrollY());              break;          case MotionEvent.ACTION_MOVE:              int deltaY=(int) (mLastMotionY-y);                  scrollBy(0,deltaY);              //mScroller.startScroll(0, getScrollY(), 0, deltaY);              invalidate();                            mLastMotionY=(int) y;              break;          case MotionEvent.ACTION_UP:              if(mVelocityTracker!=null){                  mVelocityTracker.recycle();                  mVelocityTracker=null;              }                            if(getScrollY()<0){                  mScroller.startScroll(0, -400, 0, 400);              }else if(getScrollY()>(getHeight()*(getChildCount()-1))){                  View lastView=getChildAt(getChildCount()-1);                                    mScroller.startScroll(0,lastView.getTop()+300, 0, -300);              }else{                  int position=getScrollY()/getHeight();                  int mod=getScrollY()%getHeight();                                                      if(mod>getHeight()/3){                      View positionView=getChildAt(position+1);                      mScroller.startScroll(0, positionView.getTop()-300, 0, +300);                  }else{                      View positionView=getChildAt(position);                      mScroller.startScroll(0, positionView.getTop()+300, 0, -300);                  }                                                  }              invalidate();              break;  //      case MotionEvent.ACTION_MASK:  //          if(getScrollY()<0){  //              mScroller.startScroll(0, 0, 0, 0);  //          }else if(getScrollY()>(getHeight()*(getChildCount()-1)){  //          }  //          invalidate();  //          break;          }            return true;      }            @Override      public void computeScroll() {          super.computeScroll();                    if(mScroller.computeScrollOffset()){              scrollTo(0, mScroller.getCurrY());          }else{                        }      }    }  xml布局[java] view plaincopy<?xml version="1.0" encoding="UTF-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:orientation="vertical" >        <com.zhulin.android.atools.VerticalPager          android:id="@+id/vertyPager1"          android:layout_width="fill_parent"          android:layout_height="fill_parent" >            <TextView              android:background="@drawable/a1"              android:id="@+id/textView1"              android:layout_width="match_parent"              android:layout_height="100dp"              android:text="TextView1111" />            <TextView               android:background="@drawable/a2"              android:id="@+id/textView2"              android:layout_width="fill_parent"              android:layout_height="100dp"              android:text="TextView2222" />                     <TextView               android:background="@drawable/a3"              android:id="@+id/textView3"              android:layout_width="fill_parent"              android:layout_height="100dp"              android:text="TextView2222" />                       <TextView               android:background="@drawable/a4"              android:id="@+id/textView4"              android:layout_width="fill_parent"              android:layout_height="100dp"              android:text="TextView2222" />      </com.zhulin.android.atools.VertyPager>    </LinearLayout> 


更多相关文章

  1. android 相对布局
  2. android之相对布局示例
  3. Android RelativeLayout 相对布局
  4. Android创建菜单栏(android布局实现)
  5. 【Android随记】-- Android动态加载布局
  6. Android--取得布局中指定控件的宽高
  7. android计算器布局(TableLayout)
  8. 四大布局

随机推荐

  1. Android(安卓)Handler Message 传递字符
  2. BaseAdapter
  3. android的动画实例
  4. Android中图片的放大和缩小源码
  5. Android(安卓)判断获取的时间是否是今天
  6. Android(安卓)Spinner控件的简单应用
  7. Android(安卓)7.0版本升级解析包错误
  8. Eclipse 开发 Android, Hello Spinner( 学
  9. Android(安卓)Studio 打造一个适合自己开
  10. Android使用xml中定义的动画效果