今天学习的新内容是侧滑导航栏,我想大家肯定都比较熟悉了,因为这个效果在qq里面也有,最近一直跟室友们玩的游戏是快速让自己的头像的点赞量上千。当然我的效果跟qq是没有办法比的,因为那里面的功能是在是太强大了。下面我来展示一下我做的效果截图。
我做的界面有点丑,但是对比之前已经是有了很大的改观了。想做这样的效果的话可以ps几张比较好看的图片。
下面就是粘贴我代码的时间了。
activity_main.xml
<cn.edu.rjxy.activity.DragLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:ID="@+ID/dl" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:background="@drawable/bg1" androID:clickable="true" androID:orIEntation="vertical" > <!-- 左侧菜单页面 --> <include layout="@layout/leftmenu" /> <cn.edu.rjxy.activity.MyrelativeLayout androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:background="#eeeeee" androID:orIEntation="vertical" > <!-- headbanner --> <include layout="@layout/mIDdlevIEw" /> </cn.edu.rjxy.activity.MyrelativeLayout></cn.edu.rjxy.activity.DragLayout>
leftmenu.xml
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:paddingBottom="30dp" androID:paddingleft="30dp" androID:paddingtop="10dp" > <linearLayout androID:ID="@+ID/menu_header" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:gravity="left|center" androID:orIEntation="horizontal" androID:padding="5dp" > <ImageVIEw androID:ID="@+ID/iv_headimage" androID:layout_wIDth="55dp" androID:layout_height="55dp" androID:src="@drawable/ic_launcher" /> <linearLayout androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:gravity="center|left" androID:layout_marginleft="6dp" androID:orIEntation="vertical" > <TextVIEw androID:ID="@+ID/tv_sname" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_gravity="center_vertical" androID:text="员工名" androID:textcolor="#ffffff" androID:textSize="15sp" /> <TextVIEw androID:ID="@+ID/tv_message" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_margintop="2dp" androID:textcolor="#ffffff" androID:text="蝴蝶为花醉,花却随风飞,花舞花落泪,花哭花瓣飞" androID:textSize="12sp" /> </linearLayout> </linearLayout> <TextVIEw androID:ID="@+ID/tv_setting" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_alignParentBottom="true" androID:text="设置" androID:drawablepadding="5dp" androID:gravity="center" androID:drawableleft="@drawable/ic_launcher" androID:textcolor="#ffffff" androID:textSize="15sp" /> <ListVIEw androID:ID="@+ID/lv" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_above="@ID/tv_setting" androID:layout_below="@ID/menu_header" androID:layout_marginBottom="30dp" androID:layout_margintop="20dp" androID:cachecolorHint="#00000000" androID:divIDer="@null" androID:scrollbars="none" androID:textcolor="#ffffff" /></relativeLayout>
menuList_item_text.xml
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:orIEntation="horizontal" > <linearLayout androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:gravity="center" androID:padding="10dp" androID:orIEntation="horizontal" > <ImageVIEw androID:ID="@+ID/menu_imageVIEw1" androID:layout_wIDth="40dp" androID:layout_height="40dp" androID:src="@drawable/ic_launcher" /> <TextVIEw androID:ID="@+ID/menu_text" androID:layout_wIDth="match_parent" androID:layout_height="wrap_content" androID:layout_marginleft="5dp" androID:gravity="center_vertical" androID:text="菜单1" androID:textcolor="#ffffff" androID:textSize="20sp" /> </linearLayout></linearLayout>
mIDdlevIEw.xml
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" androID:background="@androID:color/white" androID:orIEntation="vertical" > <relativeLayout androID:layout_wIDth="fill_parent" androID:layout_height="40dp" androID:background="#00C5CD" androID:orIEntation="horizontal" > <Imagebutton androID:ID="@+ID/menu_imgbtn" androID:layout_wIDth="20dp" androID:layout_height="15dp" androID:layout_centerVertical="true" androID:layout_marginleft="10dp" androID:layout_margintop="1dp" androID:background="@drawable/leftmenu_btn_selector" /> <TextVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_centerInParent="true" androID:text="@string/app_name" androID:textcolor="@androID:color/white" androID:textSize="20dp" /> </relativeLayout></linearLayout>
leftmenu_btn_selector.xml
<?xml version="1.0" enCoding="utf-8"?><selector xmlns:androID="http://schemas.androID.com/apk/res/androID"> <item androID:drawable="@drawable/leftmenu_btn_press" androID:state_pressed="true"/> <item androID:drawable="@drawable/leftmenu_btn" androID:state_pressed="false"/></selector>
MyrelativeLayout
package cn.edu.rjxy.activity;import cn.edu.rjxy.activity.DragLayout.Status;import androID.content.Context;import androID.util.AttributeSet;import androID.vIEw.MotionEvent;import androID.Widget.linearLayout;public class MyrelativeLayout extends linearLayout { private DragLayout dl; public MyrelativeLayout(Context context) { super(context); } public MyrelativeLayout(Context context,AttributeSet attrs) { super(context,attrs); } public voID setDragLayout(DragLayout dl) { this.dl = dl; } @OverrIDe public boolean onIntercepttouchEvent(MotionEvent event) { if (dl.getStatus() != Status.Close) { return true; } return super.onIntercepttouchEvent(event); } @OverrIDe public boolean ontouchEvent(MotionEvent event) { if (dl.getStatus() != Status.Close) { if (event.getAction() == MotionEvent.ACTION_UP) { dl.close(); } return true; } return super.ontouchEvent(event); }}
DragLayout
package cn.edu.rjxy.activity;import com.nineoldandroIDs.vIEw.VIEwHelper;import androID.content.Context;import androID.graphics.color;import androID.graphics.PorterDuff.Mode;import androID.support.v4.vIEw.GestureDetectorCompat;import androID.support.v4.vIEw.VIEwCompat;import androID.support.v4.Widget.VIEwDragHelper;import androID.util.AttributeSet;import androID.vIEw.GestureDetector.SimpleOnGestureListener;import androID.vIEw.MotionEvent;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.FrameLayout;import androID.Widget.ImageVIEw;import androID.Widget.relativeLayout;public class DragLayout extends FrameLayout { private boolean isShowShadow = true; private GestureDetectorCompat gestureDetector; private VIEwDragHelper dragHelper; private DragListener dragListener; private int range; private int wIDth; private int height; private int mainleft; private Context context; private ImageVIEw iv_shadow; private relativeLayout vg_left; private MyrelativeLayout vg_main; private Status status = Status.Close; public DragLayout(Context context) { this(context,null); } public DragLayout(Context context,AttributeSet attrs) { this(context,attrs,0); this.context = context; } public DragLayout(Context context,AttributeSet attrs,int defStyle) { super(context,defStyle); gestureDetector = new GestureDetectorCompat(context,new YScrollDetector()); dragHelper = VIEwDragHelper.create(this,dragHelperCallback); } class YScrollDetector extends SimpleOnGestureListener { @OverrIDe public boolean onScroll(MotionEvent e1,MotionEvent e2,float dx,float dy) { return Math.abs(dy) <= Math.abs(dx); } } private VIEwDragHelper.Callback dragHelperCallback = new VIEwDragHelper.Callback() { @OverrIDe public int clampVIEwpositionHorizontal(VIEw child,int left,int dx) { if (mainleft + dx < 0) { return 0; } else if (mainleft + dx > range) { return range; } else { return left; } } @OverrIDe public boolean tryCaptureVIEw(VIEw child,int pointerID) { return true; } @OverrIDe public int getVIEwHorizontalDragRange(VIEw child) { return wIDth; } @OverrIDe public voID onVIEwReleased(VIEw releasedChild,float xvel,float yvel) { super.onVIEwReleased(releasedChild,xvel,yvel); if (xvel > 0) { open(); } else if (xvel < 0) { close(); } else if (releasedChild == vg_main && mainleft > range * 0.3) { open(); } else if (releasedChild == vg_left && mainleft > range * 0.7) { open(); } else { close(); } } @OverrIDe public voID onVIEwpositionChanged(VIEw changedVIEw,int top,int dx,int dy) { if (changedVIEw == vg_main) { mainleft = left; } else { mainleft = mainleft + left; } if (mainleft < 0) { mainleft = 0; } else if (mainleft > range) { mainleft = range; } if (isShowShadow) { iv_shadow.layout(mainleft,mainleft + wIDth,height); } if (changedVIEw == vg_left) { vg_left.layout(0,wIDth,height); vg_main.layout(mainleft,height); } dispatchDragEvent(mainleft); } }; public interface DragListener { public voID onopen(); public voID onClose(); public voID onDrag(float percent); } public voID setDragListener(DragListener dragListener) { this.dragListener = dragListener; } @OverrIDe protected voID onFinishInflate() { super.onFinishInflate(); if (isShowShadow) { iv_shadow = new ImageVIEw(context); iv_shadow.setimageResource(R.drawable.shadow); LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); addVIEw(iv_shadow,1,lp); } vg_left = (relativeLayout) getChildAt(0); vg_main = (MyrelativeLayout) getChildAt(isShowShadow ? 2 : 1); vg_main.setDragLayout(this); vg_left.setClickable(true); vg_main.setClickable(true); } public VIEwGroup getVg_main() { return vg_main; } public VIEwGroup getVg_left() { return vg_left; } @OverrIDe protected voID onSizeChanged(int w,int h,int olDW,int oldh) { super.onSizeChanged(w,h,olDW,oldh); wIDth = vg_left.getMeasureDWIDth(); height = vg_left.getMeasuredHeight(); range = (int) (wIDth * 0.6f); } @OverrIDe protected voID onLayout(boolean changed,int right,int bottom) { vg_left.layout(0,height); vg_main.layout(mainleft,height); } @OverrIDe public boolean onIntercepttouchEvent(MotionEvent ev) { return dragHelper.shouldIntercepttouchEvent(ev) && gestureDetector.ontouchEvent(ev); } @OverrIDe public boolean ontouchEvent(MotionEvent e) { try { dragHelper.processtouchEvent(e); } catch (Exception ex) { ex.printstacktrace(); } return false; } private voID dispatchDragEvent(int mainleft) { if (dragListener == null) { return; } float percent = mainleft / (float) range; animateVIEw(percent); dragListener.onDrag(percent); Status lastStatus = status; if (lastStatus != getStatus() && status == Status.Close) { dragListener.onClose(); } else if (lastStatus != getStatus() && status == Status.Open) { dragListener.onopen(); } } private voID animateVIEw(float percent) { float f1 = 1 - percent * 0.3f; VIEwHelper.setScaleX(vg_main,f1); VIEwHelper.setScaleY(vg_main,f1); VIEwHelper.setTranslationX(vg_left,-vg_left.getWIDth() / 2.3f + vg_left.getWIDth() / 2.3f * percent); VIEwHelper.setScaleX(vg_left,0.5f + 0.5f * percent); VIEwHelper.setScaleY(vg_left,0.5f + 0.5f * percent); VIEwHelper.setAlpha(vg_left,percent); if (isShowShadow) { VIEwHelper.setScaleX(iv_shadow,f1 * 1.4f * (1 - percent * 0.12f)); VIEwHelper.setScaleY(iv_shadow,f1 * 1.85f * (1 - percent * 0.12f)); } getBackground().setcolorFilter( evaluate(percent,color.BLACK,color.transparent),Mode.SRC_OVER); } private Integer evaluate(float fraction,Object startValue,Integer endValue) { int startInt = (Integer) startValue; int startA = (startInt >> 24) & 0xff; int startR = (startInt >> 16) & 0xff; int startG = (startInt >> 8) & 0xff; int startB = startInt & 0xff; int endInt = (Integer) endValue; int endA = (endInt >> 24) & 0xff; int endR = (endInt >> 16) & 0xff; int endG = (endInt >> 8) & 0xff; int endB = endInt & 0xff; return (int) ((startA + (int) (fraction * (endA - startA))) << 24) | (int) ((startR + (int) (fraction * (endR - startR))) << 16) | (int) ((startG + (int) (fraction * (endG - startG))) << 8) | (int) ((startB + (int) (fraction * (endB - startB)))); } @OverrIDe public voID computeScroll() { if (dragHelper.continueSettling(true)) { VIEwCompat.postInvalIDateOnAnimation(this); } } public enum Status { Drag,Open,Close } public Status getStatus() { if (mainleft == 0) { status = Status.Close; } else if (mainleft == range) { status = Status.Open; } else { status = Status.Drag; } return status; } public voID open() { open(true); } public voID open(boolean animate) { if (animate) { if (dragHelper.smoothSlIDeVIEwTo(vg_main,range,0)) { VIEwCompat.postInvalIDateOnAnimation(this); } } else { vg_main.layout(range,range * 2,height); dispatchDragEvent(range); } } public voID close() { close(true); } public voID close(boolean animate) { if (animate) { if (dragHelper.smoothSlIDeVIEwTo(vg_main,0)) { VIEwCompat.postInvalIDateOnAnimation(this); } } else { vg_main.layout(0,height); dispatchDragEvent(0); } }}
MainActivity
package cn.edu.rjxy.activity;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import cn.edu.rjxy.activity.DragLayout.DragListener;import androID.app.Activity;import androID.os.Bundle;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.AdapterVIEw;import androID.Widget.AdapterVIEw.OnItemClickListener;import androID.Widget.Imagebutton;import androID.Widget.linearLayout;import androID.Widget.ListVIEw;import androID.Widget.SimpleAdapter;import androID.Widget.TextVIEw;import androID.Widget.Toast;public class MainActivity extends Activity { /** 左边侧滑菜单 */ private DragLayout mDragLayout; private ListVIEw menuListVIEw;// 菜单列表 private Imagebutton menuSettingBtn;// 菜单呼出按钮 private linearLayout menu_header; private TextVIEw menu_setting; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); menu_setting=(TextVIEw) this.findVIEwByID(R.ID.tv_setting); menu_header = (linearLayout) this.findVIEwByID(R.ID.menu_header); /** * 如果需要在别的Activity界面中也实现侧滑菜单效果,需要在布局中引入DragLayout(同本Activity方式), * 然后在onCreate中声明使用; Activity界面部分,需要包裹在MyrelativeLayout中. */ mDragLayout = (DragLayout) findVIEwByID(R.ID.dl); mDragLayout.setDragListener(new DragListener() {// 动作监听 @OverrIDe public voID onopen() { } @OverrIDe public voID onClose() { } @OverrIDe public voID onDrag(float percent) { } }); // 生成测试菜单选项数据 List<Map<String,Object>> data = getMenuData(); menuListVIEw = (ListVIEw) findVIEwByID(R.ID.lv); menuListVIEw.setAdapter(new SimpleAdapter(this,data,R.layout.menuList_item_text,new String[] { "item","image" },new int[] { R.ID.menu_text,R.ID.menu_imageVIEw1 })); // 添加监听,可点击呼出菜单 menuSettingBtn = (Imagebutton) findVIEwByID(R.ID.menu_imgbtn); menuSettingBtn.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { // Todo auto-generated method stub mDragLayout.open(); } }); initResIDeListener();// 自定义添加的东东 } private voID initResIDeListener() { // Todo auto-generated method stub // 点击个人中心 menu_header.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { // Todo auto-generated method stub Toast.makeText(MainActivity.this,"进入个人中心界面",Toast.LENGTH_LONG).show(); } }); // 点击子菜单选项 menuListVIEw.setonItemClickListener(new OnItemClickListener() { @OverrIDe public voID onItemClick(AdapterVIEw<?> parent,VIEw vIEw,int position,long ID) { // Todo auto-generated method stub switch (position) { case 0: Toast.makeText(MainActivity.this,"0",Toast.LENGTH_LONG).show(); break; case 1: Toast.makeText(MainActivity.this,"1",Toast.LENGTH_LONG).show(); break; case 2: Toast.makeText(MainActivity.this,"2",Toast.LENGTH_LONG).show(); break; case 3: Toast.makeText(MainActivity.this,"3",Toast.LENGTH_LONG).show(); break; case 4: Toast.makeText(MainActivity.this,"4",Toast.LENGTH_LONG).show(); break; case 5: Toast.makeText(MainActivity.this,"5",Toast.LENGTH_LONG).show(); break; default: break; } } }); //进入设置界面 menu_setting.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { // Todo auto-generated method stub Toast.makeText(MainActivity.this,"进入设置界面",Toast.LENGTH_LONG).show(); } }); } private List<Map<String,Object>> getMenuData() { // Todo auto-generated method stub List<Map<String,Object>> data = new ArrayList<Map<String,Object>>(); Map<String,Object> item; item = new HashMap<String,Object>(); item.put("item","需参加会议"); item.put("image",R.drawable.ic_launcher); data.add(item); item = new HashMap<String,"已参加会议"); item.put("image","个人信息完善"); item.put("image","密码修改"); item.put("image",R.drawable.ic_launcher); data.add(item); return data; }}
以上所述是小编给大家介绍的AndroID侧滑导航栏的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!
总结以上是内存溢出为你收集整理的Android侧滑导航栏的实例代码全部内容,希望文章能够帮你解决Android侧滑导航栏的实例代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)