最近看了很多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的左右侧滑菜单实现的更多相关文章

  1. Android之自定义侧滑菜单

    先来上图: 我们把主界面从左向右拉动,可以看到地下有一层菜单页,从透明渐渐变得不透明,从小渐渐变大,感觉上觉得菜单页是从屏幕外面被拉到屏幕中的.下面的代码实现这个DEMO: 首先是自定义控件Slidi ...

  2. Android 高大上的侧滑菜单DrawerLayout,解决了不能全屏滑动的问题

    DrawerLayout预览 DrawerLayout主要功能就是 实现侧滑菜单效果的功能,并且可以通过增加一些设置来实现高大上的效果,那么就请看动态图:   注意左上角那个图标,有木有很好玩,哈哈. ...

  3. android文章学习 侧滑菜单实现

    http://blog.csdn.net/jj120522/article/details/8075249 http://blog.csdn.net/lilybaobei/article/detail ...

  4. Android带侧滑菜单和ToolBar的BaseActivity

    写Android的时候,可能有多个界面.在风格统一的软件中,写Activity时会有很多重复.例如我所在软工课程小组的项目:Github链接 ,里面的TaskListActivity和TeacherL ...

  5. 第三方侧滑菜单SlidingMenu在android studio中的使用

    南尘:每天进步一点点! 前面讲了官方的侧滑菜单DrawerLayout的使用,其实早在官方没有推出这个之前,就有很多第三方的jar包如SlidingMenu等,感谢开源的力量. SlidingMenu ...

  6. Android侧滑菜单代码实现

    前两天学习了hyman老师讲的Android侧滑菜单的实现,经过自己的整理分享出来给大家学习一下 现在很多APP都有菜单侧滑的功能,本篇文章主要讲解使用自定义的HorizontalScrollView ...

  7. Xamarin.Android中使用ResideMenu实现侧滑菜单

    上次使用Xamarin.Android实现了一个比较常用的功能PullToRefresh,详情见:Xamarin. Android实现下拉刷新功能 这次将实现另外一个手机App中比较常用的功能:侧滑菜 ...

  8. Android DrawerLayout 高仿QQ5.2双向侧滑菜单

    1.概述 之前写了一个Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭 ,恰逢QQ5.2又加了一个右侧菜单,刚好看了下DrawerLayout,一方面官方的东西,我都比较感兴趣:另一方面 ...

  9. android 应用架构随笔五(ActionBar与侧滑菜单DrawerLayout)

    ActionBar(V7)的添加非常简单,只需要在AndroidManifest.xml中指定Application或Activity的theme是Theme.Holo或其子类就可以了,在Androi ...

随机推荐

  1. 02_IO操作的基本规律(InputStream,OutputStream,Reader,Writer,FileReader,FileWriter,BufferedReader,BufferedWri

     模拟BufferedInputStream,编写一个类 package toto.IO; import java.io.IOException; import java.io.InputStre ...

  2. Mysql join语句的优化

    Mysql4.1开始支持SQL的子查询.这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中.使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的 ...

  3. android 标准OTA升级流程

    标准的OTA升级流程包括一下几个步骤: 1.Android设备首先会与OTA服务器进行交互,如果有更新会推送给客户.推送的信息常常会包含OTA更新包的下载地址和一些版本信息. 2.Update程序会将 ...

  4. iOS平台添加Google Admob -2/2(Unity3D开发之八)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=572 在上一篇文章中主要是编写了 ...

  5. ffmpeg转码器移植VC的工程:ffmpeg for MFC

    本文介绍一个自己做的FFMPEG移植到VC下的开源工程:ffmpeg for MFC.本工程将ffmpeg工程中的ffmpeg转码器(ffmpeg.c)移植到了VC环境下.并且使用MFC做了一套简单的 ...

  6. LocalBroadcastManager—创建更高效、更安全的广播

    前言 在写Android应用时候,有时候或多或少的需要运用广播来解决某些需求,我们知道广播有一个特性,就是使用sendBroadcast(intent);发送广播时,手机内所有注册了Broadcast ...

  7. Gradle 1.12翻译——第十九章. Gradle 守护进程

    有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...

  8. UIActionSheet,UIAlertView技术分享

    UIActionSheet #import "FirstViewController.h" @interface FirstViewController ()<UIActio ...

  9. 【Unity Shaders】Using Textures for Effects——让sprite sheets动起来

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  10. Guava 教程(4):条件,多重映射和分片

    原文出处: oschina 在本系列博客的前三章,我们大概介绍了Google的Guava类库和Collections类库,作为一名Java开发人员,相信你会从使用这些类库,进而来减少在你项目中使用样板 ...