zoukankan      html  css  js  c++  java
  • 坚向的ViewPager,上下滑动的组件,android上下滑动 VerticalPager

    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布局

    <?

    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>



  • 相关阅读:
    JQuery有几种选择器?
    Java有哪些基本数据类型
    您认为做好测试用例设计工作的关键是什么?
    final关键字
    目前主要的测试用例设计方法是什么?
    举例说明同步和异步。
    maven配置多个镜像
    参数Parameters、变量Variables
    jsp文件导包
    动态横切
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6887920.html
Copyright © 2011-2022 走看看