android实现左右侧滑菜单效果
程序员文章站
2024-02-11 21:41:46
在android开发中,左右侧滑菜单的开发已成为我们现在开发的必备技术之一,再次之前,我没有做过相类似的demo,但是项目的开发有要求有这样的效果,而且大家都知道,虽然网上...
在android开发中,左右侧滑菜单的开发已成为我们现在开发的必备技术之一,再次之前,我没有做过相类似的demo,但是项目的开发有要求有这样的效果,而且大家都知道,虽然网上由开源的代码,但是不仅种类多,看着一个头两个大,而且代码不好分离。因此我们无法简化成自己的demo,为此,还查阅了很多别人的资料,最后做出了自己想要的效果,具体效果如下所示:
图1 左边菜单
图2 右边菜单
今天要做的是把两个效果结合在一起,左右侧滑菜单
话不多说,直接上代码:
activity_main.xml:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v4.widget.drawerlayout android:id="@+id/dl" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/tv" > <!-- 作为侧拉菜单 主页面显示的效果 要写在布局的最上面 首先进行加载 --> <framelayout android:id="@+id/fl" android:layout_width="match_parent" android:layout_height="match_parent" > </framelayout> <listview android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ff0" android:layout_gravity="left" > </listview> <linearlayout android:id="@+id/ll" android:layout_width="200dp" android:layout_height="match_parent" android:layout_gravity="right" android:background="#0ff" android:orientation="vertical" > <imageview android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/ic_launcher" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="20dp" android:text="呵呵呵" /> </linearlayout> </android.support.v4.widget.drawerlayout> </linearlayout>
frag_main.xml:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" > <textview android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="20dp" android:text="标题" /> <imageview android:id="@+id/iv" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/ic_launcher" /> </linearlayout>
mainactivity.java:
import java.util.arraylist; import java.util.list; import com.example.day12drawerlayout1.fragment.mainfragment; import android.os.bundle; import android.support.v4.app.fragmentactivity; import android.support.v4.app.fragmenttransaction; import android.support.v4.widget.drawerlayout; import android.support.v4.widget.drawerlayout.drawerlistener; import android.util.log; import android.view.gravity; import android.view.view; import android.widget.adapterview; import android.widget.adapterview.onitemclicklistener; import android.widget.arrayadapter; import android.widget.listview; /** * 1、静态和动态fragment的使用 * 静态 直接在布局中使用<fragment /> * 动态 使用管理器 得到一个事务 然后使用事务调用replace方法 把一个fragment对象替换到指定id的framlayout帧布局中 * @author administrator * */ public class mainactivity extends fragmentactivity { drawerlayout dl; listview lv; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); dl = (drawerlayout) findviewbyid(r.id.dl); // framelayout fl = (framelayout) findviewbyid(r.id.fl); // fl.setonclicklistener(new onclicklistener() { // // @override // public void onclick(view v) { // // todo auto-generated method stub // dl.opendrawer(gravity.right); // } // }); /** * set 一般是只有一个 如果再次调用会把前面的覆盖掉 * 和 * add 把数据添加进去 不会覆盖之前的内容 */ dl.adddrawerlistener(new drawerlistener() { //滑动状态发生改变的时候 会调用该方法 @override public void ondrawerstatechanged(int arg0) { // todo auto-generated method stub log.i("===============================", "statechanged" + arg0); } //监听滑动过程中 边界的位置 @override public void ondrawerslide(view arg0, float arg1) { // todo auto-generated method stub log.i("===============================", "drawerslide" + arg1); } //监听侧拉是否完全展开 @override public void ondraweropened(view arg0) { // todo auto-generated method stub log.i("===============================", "draweropened"); } //监听侧拉是否被关闭 @override public void ondrawerclosed(view arg0) { // todo auto-generated method stub log.i("===============================", "drawerclosed"); } }); showmain(); showlv(); } public drawerlayout getdl(){ return dl; } private void showlv() { lv = (listview) findviewbyid(r.id.lv); final list<string> list = new arraylist<string>(); for (int i = 1; i < 30; i++) { list.add("条目"+i); } arrayadapter<string> adapter = new arrayadapter<string>(this, android.r.layout.simple_list_item_1, list); lv.setadapter(adapter); lv.setonitemclicklistener(new onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { // todo auto-generated method stub dl.closedrawer(gravity.left); //把点击的listview控件中的值 赋值到主fragment对象中 mainfragment fragment = (mainfragment) getsupportfragmentmanager().findfragmentbytag("main"); fragment.setdata(list.get(position)); } }); } /** * 在侧拉效果的页面中 用来显示主页面的效果 */ private void showmain() { //动态加载fragment fragmenttransaction transaction = getsupportfragmentmanager().begintransaction(); //参数1:framlayout控件的id, 要替换的fragment对象 transaction.replace(r.id.fl, new mainfragment(), "main"); transaction.commit(); } }
mainfragment.java:
import android.os.bundle; import android.support.annotation.nullable; import android.support.v4.app.fragment; import android.view.gravity; import android.view.layoutinflater; import android.view.view; import android.view.view.onclicklistener; import android.view.viewgroup; import android.widget.imageview; import android.widget.textview; import com.example.day12drawerlayout1.mainactivity; import com.example.day12drawerlayout1.r; public class mainfragment extends fragment{ textview tv; imageview iv; @override @nullable public view oncreateview(layoutinflater inflater, @nullable viewgroup container, @nullable bundle savedinstancestate) { view view = view.inflate(getactivity(), r.layout.frag_main, null); tv = (textview) view.findviewbyid(r.id.tv_title); iv = (imageview) view.findviewbyid(r.id.iv); iv.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { // todo auto-generated method stub mainactivity activity = (mainactivity) getactivity(); activity.getdl().opendrawer(gravity.right); } }); return view; } public void setdata(string str){ tv.settext(str); } }
更多学习内容,可以点击《android侧滑效果汇总》学习。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
android实现左右侧滑菜单效果
-
微信小程序uniapp实现左滑删除效果(完整代码)
-
Android使用ViewDragHelper实现QQ6.X最新版本侧滑界面效果实例代码
-
Android使用CardView作为RecyclerView的Item并实现拖拽和左滑删除
-
Android编程实现仿美团或淘宝的多级分类菜单效果示例【附demo源码下载】
-
Android使用DrawerLayout实现仿QQ双向侧滑菜单
-
Android实现类似于PC中的右键弹出菜单效果
-
Android开源AndroidSideMenu实现抽屉和侧滑菜单
-
Android使用ViewFlipper和GestrueDetector共同实现滑屏效果实例
-
Android自定义View 仿QQ侧滑菜单的实现代码