Android编程实现的首页左右滑动切换功能示例
本文实例讲述了Android编程实现的首页左右滑动切换功能。分享给大家供大家参考,具体如下:
很多软件会选择左右滑动的主界面,实现方式也很多,这里的仅供参考,勿喷。
不多说什么了,相信大家看看代码就明白,自己也不善言辞,望大家谅解。
自定义接口,监听滑动翻页事件:
/**滑动后翻页事件*/ publicinterfaceOnViewChangedListener{ publicvoidOnViewChanged(intviewId); }
滑动翻页view(滑动翻页不是很灵敏):
importandroid.content.Context; importandroid.graphics.Canvas; importandroid.graphics.PointF; importandroid.graphics.drawable.Drawable; importandroid.util.AttributeSet; importandroid.view.MotionEvent; importandroid.view.View; importandroid.view.ViewConfiguration; importandroid.widget.FrameLayout; importandroid.widget.Scroller; publicclassScrollerViewextendsFrameLayout{ privateScrollerscroller; privateDrawabledrawable; privateOnViewChangedListenerlistener; publicScrollerView(Contextcontext){ this(context,null,0); } publicScrollerView(Contextcontext,AttributeSetattrs){ this(context,attrs,0); } publicScrollerView(Contextcontext,AttributeSetattrs,intdefStyle){ super(context,attrs,defStyle); scroller=newScroller(context); } privatePointFlast=newPointF(); privatefinalintTOUCH_SLOP=ViewConfiguration.get(getContext()) .getScaledTouchSlop(); @Override publicbooleanonInterceptTouchEvent(MotionEventevent){ finalintx=(int)event.getX(); booleanflag=false; switch(event.getAction()){ caseMotionEvent.ACTION_DOWN: last.x=x; break; caseMotionEvent.ACTION_MOVE: finalintdeltaX=(int)(last.x-x); if(Math.abs(deltaX)>TOUCH_SLOP){ flag=true; } break; caseMotionEvent.ACTION_UP: break; } returnflag; } publicbooleanonTouchEvent(MotionEventevent){ finalintx=(int)event.getX(); finalintwidth=getWidth(); switch(event.getAction()){ caseMotionEvent.ACTION_DOWN: if(!scroller.isFinished()){ scroller.abortAnimation(); } break; caseMotionEvent.ACTION_MOVE: finalintdeltaX=(int)(last.x-x); if(Math.abs(deltaX)0){ scrollBy(Math.max(-getScrollX(),deltaX),0); } }elseif(deltaX>0){ finalintavailableToScroll=getChildAt(getChildCount()-1) .getRight()-getScrollX()-getWidth(); if(availableToScroll>0){ scrollBy(Math.min(availableToScroll,deltaX),0); } } break; caseMotionEvent.ACTION_UP: caseMotionEvent.ACTION_CANCEL: finalOnViewChangedListenerchangedListener=listener; intdx=(getScrollX()+width/2)/width; if(dx<0){ dx=0; } if(dx>getChildCount()-1){ dx=getChildCount()-1; } changedListener.OnViewChanged(dx); dx*=width; dx-=getScrollX(); scroller.startScroll(getScrollX(),0,dx,0,Math.abs(dx)*3); break; } invalidate(); returntrue; } @Override protectedvoidonLayout(booleanchanged,intl,intt,intr,intb){ finalintwidth=getWidth(); finalintcount=getChildCount(); intheight=getHeight(); intchildLeft=0; for(inti=0;i 主Activity:
importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.LayoutInflater; importandroid.view.View; importandroid.view.Window; importandroid.widget.ImageView; publicclassMainActivityextendsActivityimplementsOnViewChangedListener{ privateScrollerViewcontainer; privateViewview_1,view_2; privateImageViewimgLeft,imgRight; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); initView(); } privatevoidinitView(){ LayoutInflaterinflater=LayoutInflater.from(this); container=(ScrollerView)findViewById(R.id.main_container); container.setOnViewChangedListener(this); imgLeft=(ImageView)findViewById(R.id.img_left); imgRight=(ImageView)findViewById(R.id.img_right); view_1=inflater.inflate(R.layout.layout_view_1,null); view_2=inflater.inflate(R.layout.layout_view_2,null); container.addView(view_1); container.addView(view_2); } @Override publicvoidOnViewChanged(intviewId){ switch(viewId){ case0: imgLeft.setImageResource(R.drawable.main_icon_check); imgRight.setImageResource(R.drawable.main_icon_normal); break; case1: imgLeft.setImageResource(R.drawable.main_icon_normal); imgRight.setImageResource(R.drawable.main_icon_check); break; } } }附:完整实例代码点击此处本站下载。
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android布局layout技巧总结》、《Android视图View技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。