2019独角兽企业重金招聘Python工程师标准>>>

                 来说说它的思路,底下是两个或多个视图,分别通过控制它们的宽度、左边距来控制它们的显示,来看看代码

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
02        xmlns:tools="http://schemas.android.com/tools"
03        android:id="@+id/layout"
04        android:layout_width="match_parent"
05        android:layout_height="match_parent"
06        android:orientation="horizontal"
07        tools:context=".MainActivity" >
08
09        <LinearLayout
10            android:id="@+id/menu"
11            android:layout_width="match_parent"
12            android:layout_height="match_parent"
13            android:background="@drawable/menu" >
14        </LinearLayout>
15
16        <LinearLayout
17            android:id="@+id/content"
18            android:layout_width="match_parent"
19            android:layout_height="match_parent"
20            android:background="@drawable/content" >
21        </LinearLayout>
22
23    </LinearLayout>

MainActivity.java

public class MainActivity extends Activity implements OnTouchListener
02    {
03
04        private LinearLayout menu;
05        private LinearLayout content;
06        private LayoutParams menuParams;
07        private LayoutParams contentParams;
08
09        // menu完全显示时,留给content的宽度值。
10        private static final int menuPadding = 80;
11
12        // 分辨率
13        private int disPlayWidth;
14
15        private float xDown;
16        private float xMove;
17
18        private boolean mIsShow = false;
19        private static final int speed = 50;
20
21        @Override
22        protected void onCreate(Bundle savedInstanceState)
23        {
24            super.onCreate(savedInstanceState);
25            requestWindowFeature(Window.FEATURE_NO_TITLE);
26            setContentView(R.layout.activity_main);
27
28            disPlayWidth = getWindowManager().getDefaultDisplay().getWidth();
29
30            menu = (LinearLayout) findViewById(R.id.menu);
31            content = (LinearLayout) findViewById(R.id.content);
32            menuParams = (LayoutParams) menu.getLayoutParams();
33            contentParams = (LayoutParams) content.getLayoutParams();
34            findViewById(R.id.layout).setOnTouchListener(this);
35
36            menuParams.width = disPlayWidth - menuPadding;
37            contentParams.width = disPlayWidth;
38            showMenu(mIsShow);
39        }
40
41        @Override
42        public boolean onTouch(View v, MotionEvent event)
43        {
44            switch (event.getAction())
45            {
46            case MotionEvent.ACTION_DOWN:
47                showMenu(!mIsShow);
48                break;
49            case MotionEvent.ACTION_MOVE:
50                break;
51            case MotionEvent.ACTION_UP:
52                break;
53            }
54            return true;
55        }
56
57        private void showMenu(boolean isShow)
58        {
59            if (isShow)
60            {
61                mIsShow = true;
62                menuParams.leftMargin = 0;
63            } else
64            {
65                mIsShow = false;
66                menuParams.leftMargin = 0 - menuParams.width;
67            }
68            menu.setLayoutParams(menuParams);
69        }
70        }

上述代码只是用两张图片代替了两个复杂的view(layout),你会发现,两个视图虽然可以切换,但没有动画的感觉,再加上要有拖动效果,所以,我们再给它加个平移时间段,看起来有动画的效果

package com.example.test;
002
003    import android.app.Activity;
004    import android.os.AsyncTask;
005    import android.os.Bundle;
006    import android.util.Log;
007    import android.view.MotionEvent;
008    import android.view.View;
009    import android.view.View.OnClickListener;
010    import android.view.View.OnTouchListener;
011    import android.view.Window;
012    import android.widget.LinearLayout;
013    import android.widget.LinearLayout.LayoutParams;
014
015    public class MainActivity extends Activity implements OnTouchListener, OnClickListener
016    {
017
018        private LinearLayout menu;
019        private LinearLayout content;
020        private LayoutParams menuParams;
021        private LayoutParams contentParams;
022
023        // menu完全显示时,留给content的宽度值。
024        private static final int menuPadding = 80;
025
026        // 分辨率
027        private int disPlayWidth;
028
029        private float xDown;
030        private float xMove;
031
032        private boolean mIsShow = false;
033        private static final int speed = 50;
034
035        @Override
036        protected void onCreate(Bundle savedInstanceState)
037        {
038            super.onCreate(savedInstanceState);
039            requestWindowFeature(Window.FEATURE_NO_TITLE);
040            setContentView(R.layout.activity_main);
041
042            disPlayWidth = getWindowManager().getDefaultDisplay().getWidth();
043
044            menu = (LinearLayout) findViewById(R.id.menu);
045            menu.setOnClickListener(this);
046            content = (LinearLayout) findViewById(R.id.content);
047            content.setOnClickListener(this);
048            menuParams = (LayoutParams) menu.getLayoutParams();
049            contentParams = (LayoutParams) content.getLayoutParams();
050            //findViewById(R.id.layout).setOnTouchListener(this);
051
052            menuParams.width = disPlayWidth - menuPadding;
053            contentParams.width = disPlayWidth;
054            showMenu(mIsShow);
055        }
056
057        @Override
058        public void onClick(View v)
059        {
060            switch (v.getId())
061            {
062            case R.id.menu:
063                new showMenuAsyncTask().execute(-50);
064                break;
065            case R.id.content:
066                new showMenuAsyncTask().execute(50);
067                break;
068            }
069
070        }
071
072        @Override
073        public boolean onTouch(View v, MotionEvent event)
074        {
075            switch (event.getAction())
076            {
077            case MotionEvent.ACTION_DOWN:
078                showMenu(!mIsShow);
079                break;
080            case MotionEvent.ACTION_MOVE:
081                break;
082            case MotionEvent.ACTION_UP:
083                break;
084            }
085            return true;
086        }
087
088        private void showMenu(boolean isShow)
089        {
090            if (isShow)
091            {
092                mIsShow = true;
093                menuParams.leftMargin = 0;
094            } else
095            {
096                mIsShow = false;
097                menuParams.leftMargin = 0 - menuParams.width;
098            }
099            menu.setLayoutParams(menuParams);
100        }
101
102        /**
103        *
104        *这是主要代码:模拟动画过程,也让我更熟悉了AsyncTask这玩意儿
105        *
106        */
107        class showMenuAsyncTask extends AsyncTask<Integer, Integer, Integer>
108        {
109
110            @Override
111            protected Integer doInBackground(Integer... params)
112            {
113                int leftMargin = menuParams.leftMargin;
114
115                //这里也是值得学习的地方,如果在平常,自己肯定又是这样写:
116                //   if(){
117                //       while()
118                //  }
119                //   else if(){
120                //       while()
121                //  }
122                while (true)
123                {
124                    leftMargin += params[0];
125                    if (params[0] > 0 && leftMargin >= 0)
126                    {
127                        break;
128                    } else if (params[0] < 0 && leftMargin <= -menuParams.width)
129                    {
130                        break;
131                    }
132                    publishProgress(leftMargin);
133                    try
134                    {
135                        Thread.sleep(30);
136                    } catch (InterruptedException e)
137                    {
138                        e.printStackTrace();
139                    }
140                }
141                return leftMargin;
142            }
143
144            @Override
145            protected void onProgressUpdate(Integer... values)
146            {
147                super.onProgressUpdate(values);
148                menuParams.leftMargin = values[0];
149                menu.setLayoutParams(menuParams);
150            }
151
152            @Override
153            protected void onPostExecute(Integer result)
154            {
155                super.onPostExecute(result);
156                menuParams.leftMargin = result;
157                menu.setLayoutParams(menuParams);
158            }
159
160        }
161
162    }

转载于:https://my.oschina.net/u/1036767/blog/213976

android 仿人人网滑动侧边栏相关推荐

  1. php仿微信底部菜单,Android实现简单底部导航栏 Android仿微信滑动切换效果

    Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...

  2. android仿微信的activity平滑水平切换动画,Android实现简单底部导航栏 Android仿微信滑动切换效果...

    Android实现简单底部导航栏 Android仿微信滑动切换效果 发布时间:2020-10-09 19:48:00 来源:脚本之家 阅读:96 作者:丶白泽 Android仿微信滑动切换最终实现效果 ...

  3. android滑动菜单图标,Android实现简单底部导航栏 Android仿微信滑动切换效果

    Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...

  4. android 底部滑动效果怎么做,Android实现简单底部导航栏 Android仿微信滑动切换效果...

    android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义view配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...

  5. Android仿IOS滑动关机-自定义view系列(6)

    Android仿IOS滑动关机-自定义view系列 功能简介 GIf演示 主要实现步骤-具体内容看github项目里的代码 Android技术生活交流 更多其他页面-自定义View-实用功能合集:点击 ...

  6. Android仿斗鱼滑动登录验证

    最近事情不是很多,在家无聊的时候看看直播,总能看到一些新奇的验证登录方式,正好自己最近也要去熟悉一下新的开发工具Android Studio,所以打算自己实现一下. 先看一下效果图: 一.确认需求 首 ...

  7. android仿苹果滑动,Android 仿Ios 滑动返回上一目录

    IMG_0026.JPGSwipeBackLayout是一个在Android平台上实现了Activity滑动返回的库. 实现了左,右,上,下四种手势返回的功能,在ios里滑动返回是系统自带可以配置的功 ...

  8. android仿ios滑动解锁,Android自定义绘制:Shader - 模仿iOS滑动解锁

    拖动进度条的时候,文字上有一坨类似光照的东西,闪闪的飘过去,类似 iOS 系统的 "滑动来解锁",  通过这篇文章介绍的 Shader ,可以很轻松的实现这种效果- 一.Shade ...

  9. android仿苹果滑动,Android开发仿IOS的滑动按钮

    释放双眼,带上耳机,听听看~! 项目结构 MainActivity public class MainActivity extends AppCompatActivity { @Override pr ...

最新文章

  1. 通过describe命令学习Kubernetes的pod属性详解
  2. nod32用户名和密码每天更新_忘记登录密码没有U盘怎么办?无U盘重置密码Win7篇
  3. 《Head First Python》第六章--定制数据对象
  4. php邮箱验证laravel接口,Email认证 | Laravel 中文文档 - 码农教程
  5. 华为手机怎么隐藏按键图标_华为手机隐藏技巧,一键简单设置,让沟通更加便捷...
  6. TCP同步和异步连接_学习笔记
  7. nssl1217-So many prefix?【KMP】
  8. 96. 不同的二叉搜索树
  9. 将SublimeText加入右键菜单
  10. AWT_方位布局(Java)
  11. poj japan 数状数组解决逆序数
  12. Unity 材质之_stander shader
  13. GIS(地理信息系统)
  14. 新生代公链再攻「不可能三角」
  15. jq左右按钮控制内容左右移动
  16. 树莓派的ssh连接配置
  17. 【读书笔记】《结构思考力》——李忠秋
  18. 22-0002 天猫店铺搜索页面分析
  19. linux中more是什么命令,linux系统more命令
  20. java 策略模式 促销_设计模式之策略模式

热门文章

  1. sh执行文件 参数传递_sh 脚本执行sql文件传参数
  2. 信号与系统 计算机,《信号与系统》计算机练习——利用MATLAB
  3. c语言 typeof 结构体,Go语言通过反射获取结构体的成员类型
  4. java final 初始化_在Java中,可以从构造函数助手中初始化final字段吗?
  5. centos6编译安装MYSQL8_CentOS 6.4编译安装MySQL8.0
  6. 自定义过滤器和自定义标签
  7. (3) ebj学习:有状态bean和无状态bean区别
  8. Vue3.js 全局组价案例入门
  9. 2021年高考成绩查询陕西文科,2021年陕西高考文科二本分数线预测
  10. springmvc使用freemarker