Android自定义ViewPager实例
本文实例讲述了Android自定义ViewPager的方法。分享给大家供大家参考,具体如下:
packagecom.rong.activity; importandroid.content.Context; importandroid.graphics.Color; importandroid.util.AttributeSet; importandroid.view.MotionEvent; importandroid.view.VelocityTracker; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.LinearLayout; importandroid.widget.Scroller; publicclassCustomViewPagerextendsViewGroup{ privateContextmContext; privateintscreenWidth; privateintscreenHight; privateintlastMoveX=0; privateVelocityTrackervelocityTracker; privateintMAX_VELOCITY=600; privateintcurScreen=0; privateScrollerscroller; publicCustomViewPager(Contextcontext){ super(context); mContext=context; initView(); } publicCustomViewPager(Contextcontext,AttributeSetattrs){ super(context,attrs); mContext=context; initView(); } publicCustomViewPager(Contextcontext,AttributeSetattrs,intdefStyle){ super(context,attrs,defStyle); mContext=context; initView(); } @Override publicbooleanonTouchEvent(MotionEventevent){ if(velocityTracker==null){ velocityTracker=VelocityTracker.obtain(); } velocityTracker.addMovement(event); intx=(int)event.getX(); switch(event.getAction()){ caseMotionEvent.ACTION_DOWN: lastMoveX=x; break; caseMotionEvent.ACTION_MOVE: intdis=lastMoveX-x; scrollBy(dis,0); lastMoveX=x; break; caseMotionEvent.ACTION_UP: velocityTracker.computeCurrentVelocity(1000); intvelocityX=(int)velocityTracker.getXVelocity(); if(velocityX>MAX_VELOCITY&&curScreen>0){ jump2Screen(curScreen-1); }elseif(velocityX<-MAX_VELOCITY&&curScreen<getChildCount()-1){ jump2Screen(curScreen+1); }else{ intscreen=(getScrollX()+screenWidth/2)/screenWidth; jump2Screen(screen); } if(velocityTracker!=null){ velocityTracker.recycle(); velocityTracker=null; } break; } returntrue; } /** *跳转到指定Screen *@paramscreen */ publicvoidjump2Screen(intscreen){ curScreen=screen; if(curScreen>getChildCount()-1){ curScreen=getChildCount()-1; } intdis=curScreen*screenWidth-getScrollX(); scroller.startScroll(getScrollX(),0,dis,0); invalidate(); } @Override publicvoidcomputeScroll(){ if(scroller.computeScrollOffset()){ scrollTo(scroller.getCurrX(),0); postInvalidate(); } } publicvoidinitView(){ scroller=newScroller(mContext); LinearLayoutlayout1=newLinearLayout(getContext()); layout1.setBackgroundColor(Color.RED); addView(layout1); LinearLayoutlayout2=newLinearLayout(getContext()); layout2.setBackgroundColor(Color.GREEN); addView(layout2); LinearLayoutlayout3=newLinearLayout(getContext()); layout3.setBackgroundColor(Color.BLUE); addView(layout3); } @Override protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){ super.onMeasure(widthMeasureSpec,heightMeasureSpec); screenWidth=MeasureSpec.getSize(widthMeasureSpec); screenHight=MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension(screenWidth,screenHight); for(inti=0;i<getChildCount();i++){ Viewview=getChildAt(i); view.measure(screenWidth,screenHight); } } @Override protectedvoidonLayout(booleanchanged,intl,intt,intr,intb){ intleftWidth=0; for(inti=0;i<getChildCount();i++){ Viewview=getChildAt(i); view.layout(leftWidth,0,leftWidth+screenWidth,screenHight); leftWidth=leftWidth+screenWidth; } } }
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。