android实现上下左右滑动界面布局
程序员文章站
2022-09-02 08:26:54
本文实例为大家分享了android实现滑动界面布局的具体代码,供大家参考,具体内容如下
1.我使用的是scrollview嵌套horizontalscrollview让scrollv...
本文实例为大家分享了android实现滑动界面布局的具体代码,供大家参考,具体内容如下
1.我使用的是scrollview嵌套horizontalscrollview让scrollview负责上下滑动horizontalscrollview负责左右滑动
2.以下代码提供了思路和完成手段,请根据具体业务去进行修改,我试过使用recyclerview进行自定义,发现一旦有了复杂业务之后会掉帧卡顿所以使用了这种方法
xml布局
<?xml version="1.0" encoding="utf-8"?> <test.smartonet.com.myapplication.pagerscrollview xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent"> <linearlayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <horizontalscrollview android:id="@+id/hor" android:layout_width="match_parent" android:background="#e1f1f1" android:layout_height="160dp"> <linearlayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center|left" android:gravity="center" android:orientation="horizontal"> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/> </linearlayout> </horizontalscrollview> <horizontalscrollview android:id="@+id/hor1" android:layout_width="match_parent" android:scrollbars="none" android:background="#a2f2f2" android:layout_height="160dp"> <linearlayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center|left" android:gravity="center" android:orientation="horizontal"> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/> </linearlayout> </horizontalscrollview> <horizontalscrollview android:id="@+id/hor2" android:layout_width="match_parent" android:scrollbars="none" android:background="#a2a2f2" android:layout_height="160dp"> <linearlayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center|left" android:gravity="center" android:orientation="horizontal"> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/> </linearlayout> </horizontalscrollview> <horizontalscrollview android:id="@+id/hor3" android:layout_width="match_parent" android:scrollbars="none" android:background="#f3f3f3" android:layout_height="160dp"> <linearlayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center|left" android:gravity="center" android:orientation="horizontal"> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/> </linearlayout> </horizontalscrollview> <horizontalscrollview android:id="@+id/hor4" android:layout_width="match_parent" android:scrollbars="none" android:background="#a4f4f4" android:layout_height="200dp"> <linearlayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center|left" android:gravity="center" android:orientation="horizontal"> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/> </linearlayout> </horizontalscrollview> <horizontalscrollview android:id="@+id/hor5" android:layout_width="match_parent" android:scrollbars="none" android:background="#f5f5f5" android:layout_height="200dp"> <linearlayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center|left" android:gravity="center" android:orientation="horizontal"> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/> </linearlayout> </horizontalscrollview> <horizontalscrollview android:id="@+id/hor6" android:layout_width="match_parent" android:scrollbars="none" android:background="#a5f5f5" android:layout_height="200dp"> <linearlayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center|left" android:gravity="center" android:orientation="horizontal"> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a1"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a2"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a3"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a4"/> <textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a5"/><textview android:layout_width="160dp" android:layout_height="60dp" android:gravity="center" android:text="a6"/> </linearlayout> </horizontalscrollview> </linearlayout> </test.smartonet.com.myapplication.pagerscrollview>
mainavtivity的代码
package test.smartonet.com.myapplication; import android.annotation.suppresslint; import android.content.context; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.support.v7.widget.linearlayoutmanager; import android.support.v7.widget.recyclerview; import android.util.attributeset; import android.util.log; import android.view.layoutinflater; import android.view.motionevent; import android.view.view; import android.view.viewgroup; import android.widget.horizontalscrollview; import android.widget.linearlayout; import android.widget.scrollview; import android.widget.textview; import android.widget.toast; import org.w3c.dom.text; import java.lang.reflect.array; import java.util.arraylist; import java.util.list; /** * zhaohan creat 2019/3/6 */ public class mainactivity extends appcompatactivity { string tag = "主程序"; float mposx; float mposy; float mcurposx; float mcurposy; int offset=10;//偏移量 int friction = 10;//摩擦力 final list<horizontalscrollview> list = new arraylist(); @suppresslint("clickableviewaccessibility") @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); final pagerscrollview scrollview = 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(horizontalscrollview horizontalscrollview:list){ horizontalscrollview.setontouchlistener(new view.ontouchlistener() { @override public boolean ontouch(view v, motionevent event) { switch (event.getaction()) { case motionevent.action_down: mposx = event.getx(); mposy = event.gety(); log.w(tag,mposy+""); break; case motionevent.action_move: mcurposx = event.getx(); mcurposy = event.gety(); case motionevent.action_up: if (mcurposx - mposx > 0 && (math.abs(mcurposx - mposx) > offset)) { int speed = 10;//速度 int distance = 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(horizontalscrollview horizontalscrollview:list){ horizontalscrollview.smoothscrollby(distance, 0); } } return true;//true为屏蔽范围内的其他滑动监听 } else if (mcurposx - mposx < 0 && (math.abs(mcurposx - mposx) > offset)) { int speed = 10;//速度 int distance = 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(horizontalscrollview horizontalscrollview:list){ horizontalscrollview.smoothscrollby(-distance,0 ); } } return true;//true为屏蔽范围内的其他滑动监听 } break; } return true;//true为屏蔽范围内的其他滑动监听 } }); } } } class pagerscrollview extends scrollview { private float xdistance, ydistance, xlast, ylast; public pagerscrollview(context context) { super(context); } public pagerscrollview(context context, attributeset attrs) { super(context, attrs); } public pagerscrollview(context context, attributeset attrs, int defstyle) { super(context, attrs, defstyle); } @override public boolean onintercepttouchevent(motionevent ev) { switch (ev.getaction()) { case motionevent.action_down: xdistance = ydistance = 0f; xlast = ev.getx(); ylast = ev.gety(); break; case motionevent.action_move: final float curx = ev.getx(); final float cury = 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) { return false; } } return super.onintercepttouchevent(ev); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Android使用自定义View实现横行时间轴效果
下一篇: 乌龟受伤让蜗牛去买药