当前位置: 移动技术网 > 移动技术>移动开发>Android > android实现左右侧滑菜单效果

android实现左右侧滑菜单效果

2019年07月24日  | 移动技术网移动技术  | 我要评论

在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侧滑效果汇总》学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网