android 仿人人网滑动侧边栏
2019独角兽企业重金招聘Python工程师标准>>>
来说说它的思路,底下是两个或多个视图,分别通过控制它们的宽度、左边距来控制它们的显示,来看看代码
<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>
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 仿人人网滑动侧边栏相关推荐
- php仿微信底部菜单,Android实现简单底部导航栏 Android仿微信滑动切换效果
Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...
- android仿微信的activity平滑水平切换动画,Android实现简单底部导航栏 Android仿微信滑动切换效果...
Android实现简单底部导航栏 Android仿微信滑动切换效果 发布时间:2020-10-09 19:48:00 来源:脚本之家 阅读:96 作者:丶白泽 Android仿微信滑动切换最终实现效果 ...
- android滑动菜单图标,Android实现简单底部导航栏 Android仿微信滑动切换效果
Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...
- android 底部滑动效果怎么做,Android实现简单底部导航栏 Android仿微信滑动切换效果...
android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义view配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...
- Android仿IOS滑动关机-自定义view系列(6)
Android仿IOS滑动关机-自定义view系列 功能简介 GIf演示 主要实现步骤-具体内容看github项目里的代码 Android技术生活交流 更多其他页面-自定义View-实用功能合集:点击 ...
- Android仿斗鱼滑动登录验证
最近事情不是很多,在家无聊的时候看看直播,总能看到一些新奇的验证登录方式,正好自己最近也要去熟悉一下新的开发工具Android Studio,所以打算自己实现一下. 先看一下效果图: 一.确认需求 首 ...
- android仿苹果滑动,Android 仿Ios 滑动返回上一目录
IMG_0026.JPGSwipeBackLayout是一个在Android平台上实现了Activity滑动返回的库. 实现了左,右,上,下四种手势返回的功能,在ios里滑动返回是系统自带可以配置的功 ...
- android仿ios滑动解锁,Android自定义绘制:Shader - 模仿iOS滑动解锁
拖动进度条的时候,文字上有一坨类似光照的东西,闪闪的飘过去,类似 iOS 系统的 "滑动来解锁", 通过这篇文章介绍的 Shader ,可以很轻松的实现这种效果- 一.Shade ...
- android仿苹果滑动,Android开发仿IOS的滑动按钮
释放双眼,带上耳机,听听看~! 项目结构 MainActivity public class MainActivity extends AppCompatActivity { @Override pr ...
最新文章
- 通过describe命令学习Kubernetes的pod属性详解
- nod32用户名和密码每天更新_忘记登录密码没有U盘怎么办?无U盘重置密码Win7篇
- 《Head First Python》第六章--定制数据对象
- php邮箱验证laravel接口,Email认证 | Laravel 中文文档 - 码农教程
- 华为手机怎么隐藏按键图标_华为手机隐藏技巧,一键简单设置,让沟通更加便捷...
- TCP同步和异步连接_学习笔记
- nssl1217-So many prefix?【KMP】
- 96. 不同的二叉搜索树
- 将SublimeText加入右键菜单
- AWT_方位布局(Java)
- poj japan 数状数组解决逆序数
- Unity 材质之_stander shader
- GIS(地理信息系统)
- 新生代公链再攻「不可能三角」
- jq左右按钮控制内容左右移动
- 树莓派的ssh连接配置
- 【读书笔记】《结构思考力》——李忠秋
- 22-0002 天猫店铺搜索页面分析
- linux中more是什么命令,linux系统more命令
- java 策略模式 促销_设计模式之策略模式
热门文章
- sh执行文件 参数传递_sh 脚本执行sql文件传参数
- 信号与系统 计算机,《信号与系统》计算机练习——利用MATLAB
- c语言 typeof 结构体,Go语言通过反射获取结构体的成员类型
- java final 初始化_在Java中,可以从构造函数助手中初始化final字段吗?
- centos6编译安装MYSQL8_CentOS 6.4编译安装MySQL8.0
- 自定义过滤器和自定义标签
- (3) ebj学习:有状态bean和无状态bean区别
- Vue3.js 全局组价案例入门
- 2021年高考成绩查询陕西文科,2021年陕西高考文科二本分数线预测
- springmvc使用freemarker