android实现上下左右滑动界面布局
本文实例为大家分享了android实现滑动界面布局的具体代码,供大家参考,具体内容如下
1.我使用的是ScrollView嵌套HorizontalScrollView让ScrollView负责上下滑动HorizontalScrollView负责左右滑动
2.以下代码提供了思路和完成手段,请根据具体业务去进行修改,我试过使用recyclerview进行自定义,发现一旦有了复杂业务之后会掉帧卡顿所以使用了这种方法
XML布局
mainAvtivity的代码
packagetest.smartonet.com.myapplication; importandroid.annotation.SuppressLint; importandroid.content.Context; importandroid.support.v7.app.AppCompatActivity; importandroid.os.Bundle; importandroid.support.v7.widget.LinearLayoutManager; importandroid.support.v7.widget.RecyclerView; importandroid.util.AttributeSet; importandroid.util.Log; importandroid.view.LayoutInflater; importandroid.view.MotionEvent; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.HorizontalScrollView; importandroid.widget.LinearLayout; importandroid.widget.ScrollView; importandroid.widget.TextView; importandroid.widget.Toast; importorg.w3c.dom.Text; importjava.lang.reflect.Array; importjava.util.ArrayList; importjava.util.List; /** *zhaohancreat2019/3/6 */ publicclassMainActivityextendsAppCompatActivity{ StringTAG="主程序"; floatmPosX; floatmPosY; floatmCurPosX; floatmCurPosY; intoffset=10;//偏移量 intfriction=10;//摩擦力 finalListlist=newArrayList(); @SuppressLint("ClickableViewAccessibility") @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); finalPagerScrollViewscrollView=findViewById(R.id.main); list.add((HorizontalScrollView)findViewById(R.id.hor)); list.add((HorizontalScrollView)findViewById(R.id.hor1)); list.add((HorizontalScrollView)findViewById(R.id.hor2)); list.add((HorizontalScrollView)findViewById(R.id.hor3)); list.add((HorizontalScrollView)findViewById(R.id.hor4)); list.add((HorizontalScrollView)findViewById(R.id.hor5)); list.add((HorizontalScrollView)findViewById(R.id.hor6)); for(HorizontalScrollViewhorizontalScrollView:list){ horizontalScrollView.setOnTouchListener(newView.OnTouchListener(){ @Override publicbooleanonTouch(Viewv,MotionEventevent){ switch(event.getAction()){ caseMotionEvent.ACTION_DOWN: mPosX=event.getX(); mPosY=event.getY(); Log.w(TAG,mPosY+""); break; caseMotionEvent.ACTION_MOVE: mCurPosX=event.getX(); mCurPosY=event.getY(); caseMotionEvent.ACTION_UP: if(mCurPosX-mPosX>0&&(Math.abs(mCurPosX-mPosX)>offset)){ intspeed=10;//速度 intdistance=20;//滑动距离 if((Math.abs(mCurPosX-mPosX))>50){ speed=(int)Math.abs(mCurPosX-mPosX)/friction; distance=(int)Math.abs(mCurPosX-mPosX)/3;//滑动距离 } //向右滑動 Log.w(TAG,"向右滑动了!"); while(distance>0){ distance=distance-speed; for(HorizontalScrollViewhorizontalScrollView:list){ horizontalScrollView.smoothScrollBy(distance,0); } } returntrue;//true为屏蔽范围内的其他滑动监听 }elseif(mCurPosX-mPosX<0&&(Math.abs(mCurPosX-mPosX)>offset)){ intspeed=10;//速度 intdistance=20;//滑动距离 if((Math.abs(mCurPosX-mPosX))>50){ speed=(int)Math.abs(mCurPosX-mPosX)/friction; distance=(int)Math.abs(mCurPosX-mPosX)/3;//滑动距离 } //向左滑动 Log.w(TAG,"向左滑动了!"); //改为滑动 while(distance>0){ distance=distance-speed; for(HorizontalScrollViewhorizontalScrollView:list){ horizontalScrollView.smoothScrollBy(-distance,0); } } returntrue;//true为屏蔽范围内的其他滑动监听 } break; } returntrue;//true为屏蔽范围内的其他滑动监听 } }); } } } classPagerScrollViewextendsScrollView{ privatefloatxDistance,yDistance,xLast,yLast; publicPagerScrollView(Contextcontext){ super(context); } publicPagerScrollView(Contextcontext,AttributeSetattrs){ super(context,attrs); } publicPagerScrollView(Contextcontext,AttributeSetattrs,intdefStyle){ super(context,attrs,defStyle); } @Override publicbooleanonInterceptTouchEvent(MotionEventev){ switch(ev.getAction()){ caseMotionEvent.ACTION_DOWN: xDistance=yDistance=0f; xLast=ev.getX(); yLast=ev.getY(); break; caseMotionEvent.ACTION_MOVE: finalfloatcurX=ev.getX(); finalfloatcurY=ev.getY(); xDistance+=Math.abs(curX-xLast); yDistance+=Math.abs(curY-yLast); xLast=curX; yLast=curY; /** *X轴滑动距离大于Y轴滑动距离,也就是用户横向滑动时,返回false,ScrollView不处理这次事件, *让子控件中的TouchEvent去处理,所以横向滑动的事件交由ViewPager处理, *ScrollView只处理纵向滑动事件 */ if(xDistance>yDistance){ returnfalse; } } returnsuper.onInterceptTouchEvent(ev); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。