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