android的左右侧滑菜单实现
最近看了很多app应用都采用的是左右侧滑,比如网易新闻、凡客等
这里也试着写一下侧滑
首先看一下效果

然后给出xml布局代码
<RelativeLayout 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"
tools:context=".MainActivity" >
<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/leftMenu"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/left_text" />
</LinearLayout>
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<RelativeLayout
android:layout_width="fill_parent"
android:id="@+id/layout01"
android:layout_height="wrap_content"
android:background="@drawable/bg_title"
android:layout_alignParentTop="true"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/leftBtn"
android:layout_alignParentLeft="true"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:padding="10dp"
android:src="@drawable/home_category"/>
<ImageView
android:id="@+id/leftIcon"
android:layout_toRightOf="@+id/leftBtn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/title_icon_line"/>
<TextView
android:id="@+id/home_resource"
android:text="@string/app_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="@dimen/title_size"
android:textStyle="bold"
android:padding="10dp"
android:gravity="center"/>
<ImageView
android:id="@+id/rightIcon"
android:layout_toLeftOf="@+id/rightBtn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/title_icon_line"/>
<ImageView
android:id="@+id/rightBtn"
android:padding="10dp"
android:layout_alignParentRight="true"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/home_myvancl"
/>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/rightMenu"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/right_text" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
接着写Activity
package com.example.viewdemo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
/**
*
* TODO
* @author cuiran
* @version 1.0.0
*/
public class MainActivity extends Activity implements OnClickListener{
private static final String TAG="MainActivity";
private LinearLayout leftMenu;
private LinearLayout content;
private LinearLayout rightMenu;
private LayoutParams leftMenuParams;
private LayoutParams contentParams;
private LayoutParams rightMenuParams;
// menu完全显示时,留给content的宽度值。
private static final int menuPadding = 120;
private ImageView leftBtn,rightBtn;
// 分辨率
private int disPlayWidth;
private boolean mIsShow = false;
private boolean mIsRightShow = false;
private static final int speed = 50;
public boolean isMenu=false;
public boolean isRightMenu=false;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
/**初始化视图
* TODO
*/
private void initView() {
// TODO Auto-generated method stub
disPlayWidth = getWindowManager().getDefaultDisplay().getWidth();
leftMenu = (LinearLayout) findViewById(R.id.leftMenu);
leftMenu.setOnClickListener(this);
content = (LinearLayout) findViewById(R.id.content);
content.setOnClickListener(this);
rightMenu = (LinearLayout) findViewById(R.id.rightMenu);
rightMenu.setOnClickListener(this);
leftMenuParams = (LayoutParams) leftMenu.getLayoutParams();
contentParams = (LayoutParams) content.getLayoutParams();
rightMenuParams= (LayoutParams) rightMenu.getLayoutParams();
leftMenuParams.width = disPlayWidth - menuPadding;
contentParams.width = disPlayWidth;
rightMenuParams.width = disPlayWidth - menuPadding;
leftBtn=(ImageView)findViewById(R.id.leftBtn);
rightBtn=(ImageView)findViewById(R.id.rightBtn);
leftBtn.setOnClickListener(this);
rightBtn.setOnClickListener(this);
showMenu(mIsShow);
showRightMenu(mIsRightShow);
}
/**
* 显示界面
* TODO
* @param isShow
*/
private void showMenu(boolean isShow)
{
if (isShow)
{
mIsShow = true;
leftMenuParams.leftMargin = 0;
} else
{
mIsShow = false;
leftMenuParams.leftMargin = 0 - leftMenuParams.width;
}
leftMenu.setLayoutParams(leftMenuParams);
}
private void showRightMenu(boolean isShow)
{
if (isShow)
{
mIsRightShow = true;
contentParams.leftMargin = 0 ;
} else
{
mIsRightShow = false;
contentParams.leftMargin = 0;
}
content.setLayoutParams(contentParams);
}
/**
*
* TODO 控制左侧View
* @author cuiran
* @version 1.0.0
*/
class showMenuAsyncTask extends AsyncTask<Integer, Integer, Integer>
{
@Override
protected Integer doInBackground(Integer... params)
{
int leftMargin =leftMenuParams.leftMargin;
Log.i(TAG, "leftMargin="+leftMargin);
while (true)
{
leftMargin += params[0];
if (params[0] > 0 && leftMargin >= 0)
{
break;
} else if (params[0] < 0 && leftMargin <= -leftMenuParams.width)
{
break;
}
Log.i(TAG, "doInBackground:leftMargin"+leftMargin);
publishProgress(leftMargin);
try
{
Thread.sleep(30);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
return leftMargin;
}
@Override
protected void onProgressUpdate(Integer... values)
{
super.onProgressUpdate(values);
leftMenuParams.leftMargin = values[0];
leftMenu.setLayoutParams(leftMenuParams);
}
@Override
protected void onPostExecute(Integer result)
{
super.onPostExecute(result);
leftMenuParams.leftMargin = result;
leftMenu.setLayoutParams(leftMenuParams);
}
}
/**
*
* TODO 控制右侧View
* @author cuiran
* @version 1.0.0
*/
class showRightMenuAsyncTask extends AsyncTask<Integer, Integer, Integer>
{
@Override
protected Integer doInBackground(Integer... params)
{
int leftMargin =contentParams.leftMargin;
while (true)
{
leftMargin += params[0];
if (params[0] > 0 && leftMargin >= 0)
{
break;
} else if (params[0] < 0 && leftMargin <= -contentParams.width+menuPadding)
{
break;
}
publishProgress(leftMargin);
try
{
Thread.sleep(30);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
return leftMargin;
}
@Override
protected void onProgressUpdate(Integer... values)
{
super.onProgressUpdate(values);
contentParams.leftMargin = values[0];
content.setLayoutParams(contentParams);
}
@Override
protected void onPostExecute(Integer result)
{
Log.i(TAG, "onPostExecute");
super.onPostExecute(result);
contentParams.leftMargin = result;
content.setLayoutParams(contentParams);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/* (non-Javadoc)
* @see android.view.View.OnClickListener#onClick(android.view.View)
*/
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId())
{
case R.id.leftMenu:
isMenu=false;
new showMenuAsyncTask().execute(-speed);
break;
case R.id.leftBtn:
if(isMenu){
isMenu=false;
new showMenuAsyncTask().execute(-speed);
}else{
isMenu=true;
new showMenuAsyncTask().execute(speed);
}
break;
case R.id.rightBtn:
Log.i(TAG, "点击rightBtn");
if(isRightMenu){
isRightMenu=false;
new showRightMenuAsyncTask().execute(speed);
}else{
isRightMenu=true;
new showRightMenuAsyncTask().execute(-speed);
}
break;
case R.id.content:
break;
}
}
}
源码下载地址为:https://github.com/cayden/viewdemo
android的左右侧滑菜单实现的更多相关文章
- Android之自定义侧滑菜单
先来上图: 我们把主界面从左向右拉动,可以看到地下有一层菜单页,从透明渐渐变得不透明,从小渐渐变大,感觉上觉得菜单页是从屏幕外面被拉到屏幕中的.下面的代码实现这个DEMO: 首先是自定义控件Slidi ...
- Android 高大上的侧滑菜单DrawerLayout,解决了不能全屏滑动的问题
DrawerLayout预览 DrawerLayout主要功能就是 实现侧滑菜单效果的功能,并且可以通过增加一些设置来实现高大上的效果,那么就请看动态图: 注意左上角那个图标,有木有很好玩,哈哈. ...
- android文章学习 侧滑菜单实现
http://blog.csdn.net/jj120522/article/details/8075249 http://blog.csdn.net/lilybaobei/article/detail ...
- Android带侧滑菜单和ToolBar的BaseActivity
写Android的时候,可能有多个界面.在风格统一的软件中,写Activity时会有很多重复.例如我所在软工课程小组的项目:Github链接 ,里面的TaskListActivity和TeacherL ...
- 第三方侧滑菜单SlidingMenu在android studio中的使用
南尘:每天进步一点点! 前面讲了官方的侧滑菜单DrawerLayout的使用,其实早在官方没有推出这个之前,就有很多第三方的jar包如SlidingMenu等,感谢开源的力量. SlidingMenu ...
- Android侧滑菜单代码实现
前两天学习了hyman老师讲的Android侧滑菜单的实现,经过自己的整理分享出来给大家学习一下 现在很多APP都有菜单侧滑的功能,本篇文章主要讲解使用自定义的HorizontalScrollView ...
- Xamarin.Android中使用ResideMenu实现侧滑菜单
上次使用Xamarin.Android实现了一个比较常用的功能PullToRefresh,详情见:Xamarin. Android实现下拉刷新功能 这次将实现另外一个手机App中比较常用的功能:侧滑菜 ...
- Android DrawerLayout 高仿QQ5.2双向侧滑菜单
1.概述 之前写了一个Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭 ,恰逢QQ5.2又加了一个右侧菜单,刚好看了下DrawerLayout,一方面官方的东西,我都比较感兴趣:另一方面 ...
- android 应用架构随笔五(ActionBar与侧滑菜单DrawerLayout)
ActionBar(V7)的添加非常简单,只需要在AndroidManifest.xml中指定Application或Activity的theme是Theme.Holo或其子类就可以了,在Androi ...
随机推荐
- 关于Windows下程序执行的说明
估计有很多人首次都是通过Windows(微软的操作系统)来使用计算机的,Windows的设计导致很多人认为所有程序只要双击一下就可以被正确执行了,所以一大堆初学程序设计的童鞋就会遇到些疑问: 为什么双 ...
- React Native组件只Image
不管在Android还是在ios原生的开发中,图片都是作为控件给出来的,在RN中也有这么一个控件(Image).根据官网的资料,图片分为本地静态图片,网络图片和混合app资源.一下分类介绍来源官网. ...
- HDFS的写数据过程分析
HDFS的写数据过程分析 我们通过FileSystem类可以操控HDFS, 那我们就从这里开始分析写数据到HDFS的过程. 在我们向 HDFS 写文件的时候,调用的是 FileSystem.creat ...
- java.util.ServiceLoader使用
近期在项目中需要实现能在配置文件中定义多个统一接口类型的类,可以在程序中获取到所有配置的类,刚开始打算配置到properties中,然后去程序读取,感觉这种方式不太灵活,于是,研究研究java中有没有 ...
- 剑指offer面试题4 替换空格(c)
- 03_dbcp数据源依赖jar包,DBCP中API介绍,不同过dbcp方式使用dbcp数据库连接池,通过配置文件使用dbcp数据库连接池
DBCP数据源 使用DBCP数据源,需要导入两个jar包 Commons-dbcp.jar:连接池的实现 Common-pool.jar:连接池实现的依赖库. 导入mysql的jar包. DBC ...
- UNIX网络编程——非阻塞connect:时间获取客户程序
#include "unp.h" int connect_nonb(int sockfd, const SA *saptr, socklen_t salen, int nsec) ...
- 【OpenGL】理解一些基本问题
写在前面 啦啦啦,搞了很久的Unity Shaders,越学越觉得基础知识很重要.学Unity Shader的时候,总会想,shader到底是什么呢?shader的pipeline是什么呢?它们是怎么 ...
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(四):创建TexturePacker自动脚本
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- 精通CSS+DIV网页样式与布局--图片效果
提到图片效果,小伙伴们可能会想到美图秀秀,ps等,这些软件都是款非常不错的照片处理软件,包括常用的:黑白,增强,高斯,高对比,夜视,老照片和铅笔画等等.不管你是否是专业的 照片拍摄人员,我们都可以通过 ...