利用ObjectAnimator实现侧滑菜单的效果
2016-03-23 11:28
549 查看
objectAnimator是一种焦点可以随着动画移动的动画,下面用一个简单的平移动画的例子,来实现侧滑菜单。
首先是页面主体代码:
然后是布局界面,简单两个界面,一个显示一个隐藏,在代码中利用动画和显示隐藏交替实现来模拟侧滑菜单效果:
利用这个小界面可以实现一些轻量级的侧滑菜单的应用,而且不用导入什么三方包,可以减少程序的臃肿度。
首先是页面主体代码:
package com.example.myobjectanimation; import android.animation.Animator; import android.animation.Animator.AnimatorListener; import android.animation.ObjectAnimator; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.View; import android.view.View.OnClickListener; import android.widget.LinearLayout; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener { /** * 显示侧滑菜单 */ private static final int MENU_VISIBLE = 0; /** * 隐藏侧滑菜单 */ private static final int MENU_GONE = 1; private LinearLayout llMain; private LinearLayout llMenu; private LinearLayout llMenuRight; private LinearLayout llMenuLeft; private TextView tvMain; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { llMain = (LinearLayout) findViewById(R.id.ll_main); llMain.setOnClickListener(this); llMenu = (LinearLayout) findViewById(R.id.ll_menu); llMenu.setOnClickListener(this); llMenuLeft = (LinearLayout) findViewById(R.id.ll_menu_left); llMenuLeft.setOnClickListener(this); llMenuRight = (LinearLayout) findViewById(R.id.ll_menu_right); llMenuRight.setOnClickListener(this); tvMain = (TextView) findViewById(R.id.tv_main); tvMain.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.ll_menu_left: setLayoutType(MENU_GONE); break; case R.id.tv_main: setLayoutType(MENU_VISIBLE); break; default: break; } } /** * 控制显隐状态 * * @param type * 区分显示隐藏 */ private void setLayoutType(int type) { switch (type) { case MENU_VISIBLE: llMenu.setVisibility(View.VISIBLE); llMain.setFocusable(false); startAnimation(MENU_VISIBLE); break; case MENU_GONE: startAnimation(MENU_GONE); break; default: break; } } /** * 设置显示隐藏动画 * * @param type * 区分显示隐藏 */ private void startAnimation(int type) { switch (type) { case MENU_VISIBLE: ObjectAnimator oa = ObjectAnimator.ofFloat(llMenuRight, "translationX", 0, getWidth() / 3 * 2); oa.setDuration(0); oa.start(); oa.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { ObjectAnimator oa2 = ObjectAnimator.ofFloat(llMenuRight, "translationX", getWidth() / 3 * 2, 0); oa2.setDuration(200); oa2.start(); } @Override public void onAnimationCancel(Animator animation) { } }); break; case MENU_GONE: ObjectAnimator oa2 = ObjectAnimator.ofFloat(llMenuRight, "translationX", 0, getWidth() / 3 * 2); oa2.setDuration(200); oa2.start(); oa2.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { llMenu.setVisibility(View.GONE); llMain.setFocusable(true); } @Override public void onAnimationCancel(Animator animation) { } }); break; default: break; } } /** * 获取屏幕宽度 * * @return 屏幕宽度 */ private int getWidth() { // 获取屏幕的长宽像素 DisplayMetrics dm = new DisplayMetrics(); // 此处this为一个activity this.getWindowManager().getDefaultDisplay().getMetrics(dm); return dm.widthPixels; } }
然后是布局界面,简单两个界面,一个显示一个隐藏,在代码中利用动画和显示隐藏交替实现来模拟侧滑菜单效果:
<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" > <LinearLayout android:id="@+id/ll_main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" android:orientation="vertical" > <TextView android:id="@+id/tv_main" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="主页面" android:textSize="25sp" /> </LinearLayout> <LinearLayout android:id="@+id/ll_menu" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#aa2c2c32" android:orientation="horizontal" android:visibility="gone" > <LinearLayout android:id="@+id/ll_menu_left" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="#00000000" android:orientation="vertical" > </LinearLayout> <LinearLayout android:id="@+id/ll_menu_right" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" android:background="#ffffff" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="侧滑菜单" android:textColor="#000000" android:textSize="25sp" /> </LinearLayout> </LinearLayout> </RelativeLayout>
利用这个小界面可以实现一些轻量级的侧滑菜单的应用,而且不用导入什么三方包,可以减少程序的臃肿度。
相关文章推荐
- 在 Linux 中如何移动文件
- Gifski:一个跨平台的高质量 GIF 编码器
- 模仿动画的放大缩小容器
- PowerShell移动目录中指定文件的方法(非全部文件)
- 鼠标触发移动的分层菜单 层菜单moveMenu
- jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
- Android实现定制返回按钮动画效果的方法
- 基于Android实现随手指移动的ImageView
- Android中ViewFlipper的使用及设置动画效果实例详解
- jQuery实现美观的多级动画效果菜单代码
- php判断GIF图片是否为动画的方法
- php实现复制移动文件的方法
- jQuery实现动画效果circle实例
- javascript实现图片跟随鼠标移动效果的方法
- JavaScript Select和Option列表元素上下左右移动
- HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
- 浅析JavaScript动画
- js排序动画模拟-插入排序
- javascript+HTML5的Canvas实现Lab单车动画效果
- JS实现网页游戏中滑块响应鼠标点击移动效果