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程序设计有所帮助。