Android抽屉效果(使用LayoutParams来移动View的位置)
2013-12-27 15:57
471 查看
package com.siyehuazhilian.masterslider; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.WindowManager; import android.widget.LinearLayout; public class MainActivity extends Activity { private LinearLayout menuLayout, contentLayout; private LinearLayout.LayoutParams menuLayoutParams, contentLayoutParams; // 左边缘 private int leftEdge; // 滑动因子 private boolean speedFlag = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 菜单栏 menuLayout = (LinearLayout) findViewById(R.id.menu); // 内容栏 contentLayout = (LinearLayout) findViewById(R.id.content); // 得到父控件 menuLayoutParams = (LinearLayout.LayoutParams) menuLayout .getLayoutParams(); contentLayoutParams = (LinearLayout.LayoutParams) contentLayout .getLayoutParams(); WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); int width = windowManager.getDefaultDisplay().getWidth(); // 菜单栏隐藏起来.内容栏设置为0内容栏必须设置,否则无法随菜单栏的移动而移动,会被压缩或拉伸 leftEdge = menuLayoutParams.width = width - 80; menuLayoutParams.leftMargin = -menuLayoutParams.width; contentLayoutParams.width = width; contentLayoutParams.leftMargin = 0; } private int startX; private int distance; @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = (int) event.getRawX(); break; case MotionEvent.ACTION_MOVE: if (speedFlag) {// 每10毫秒次响应一次移动 // 计算手指移动的距离 distance = (int) ((event.getRawX() - startX) / 5); // 如果手指移动的距离加上menu左边距的大小没有超过屏幕且大于初始的位置,就移动它 if (menuLayoutParams.leftMargin + distance <= 0 && menuLayoutParams.leftMargin + distance > -leftEdge) { menuLayoutParams.leftMargin += distance; menuLayout.setLayoutParams(menuLayoutParams); } speedFlag = false; } else { controlspeed(); } break; case MotionEvent.ACTION_UP: // 手指离开时,判断移动的宽度,如果大于一半,就显示出来,否则隐藏 if (leftEdge - -menuLayoutParams.leftMargin > leftEdge / 2) { menuLayoutParams.leftMargin = 0; } else { menuLayoutParams.leftMargin = -leftEdge; } menuLayout.setLayoutParams(menuLayoutParams); break; default: break; } return true; } private void controlspeed() { try { Thread.sleep(30); } catch (InterruptedException e) { e.printStackTrace(); } speedFlag = true; } }
//源码分享
//http://pan.baidu.com/s/1o6mBPHo
相关文章推荐
- Android5.0之NavigationView的使用 。android组件之DrawerLayout(抽屉导航)-- 侧滑菜单效果
- Android - 交换控件位置:基于LayoutParams的瞬间交换与基于ObjectAnimator动画效果交换
- Android开发:使用ViewDragHelper实现抽屉拉伸效果
- android RelativeLayout属性和使用, 实现上面view叠加在下面view之上的效果
- Android使用动画过程中又设置了View的LayoutParams有卡顿现象处理
- Android 使用DrawerLayout实现抽屉效果的导航菜单
- android 使用ViewDragHelper轻松实现DrawerLayout和SlidMenu侧滑效果
- android RelativeLayout属性和使用, 实现上面view叠加在下面view之上的效果
- android中CoordinatorLayout结合TollBar自定义View的使用效果
- Android 如何动态设置View参数,LayoutParams.addRules详解,TypedValue.applyDimension的使用
- Android-->View.setX()和.setY()的使用(移动布局,设置布局位置,动态添加View)
- Android开发:使用ViewDragHelper实现抽屉拉伸效果
- android RelativeLayout属性和使用, 实现上面view叠加在下面view之上的效果2
- android 给LinearLayout中添加一定数量的控件,并让着一定数量的控件从右到左移动,每隔若干秒停顿一下,最后一个view链接第一个view,然后继续移动循环往复,形成一个死循环简单动画效果
- Android使用CoordinatorLayout和BottomSheetBehavior实现滑动效果(底部抽屉)
- Android之TabLayout+抽屉式效果和RecyclerView的使用
- Android 使用View的旋转实现漂亮的动画效果
- Android 自定义View 使用Kotlin编写雷达扫描效果
- 报错:ViewPager$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
- Android程序:使用ViewPager实现app引导页效果