现在的位置: 首页 > 综合 > 正文

【Android UI设计与开发】第18期:滑动菜单栏(三)SlidingMenu动画效果的实现

2013年03月09日 ⁄ 综合 ⁄ 共 3879字 ⁄ 字号 评论关闭

  经过上一篇文章的学习,相信大家对开源项目SlidingMenu的用法已经有了一个非常深入的了解,那么这一章博

主就来教大家滑动菜单栏滑动时动画效果的实现。博主这里用了三个不同动画效果的基础示例来教大家如何去实现,

大家弄懂了之后完全可以做到举一反三,去实现更多不同的动画效果,让你的应用软件给用户带来眼前一亮的效

果。

 

一、SlidingMenu动画效果示例一

 

1、示例一效果图

 

       该示例实现了滑动时缩放的效果,看左边的效果图可以明显的感觉到,滑动菜单栏刚刚打开时的图片比右边的效

果图滑动菜单栏打开一大半的图片要小。这里用到的是比例缩放的动画效果。

           

 

2、示例一项目结构图

 

 

3、示例一代码讲解

 

关于项目中资源文件的部分我就不详细讲解了,在上篇文章中已经详细的介绍过了,这地方我就着重的讲解一下MainActivity类,也是主程序入口类,滑动菜单栏和滑动的效果都是在此类中实现。

[java] view
plain
copy

  1. package com.example.myslidingmenudemo08;  
  2.   
  3. import android.graphics.Canvas;  
  4. import android.os.Bundle;  
  5. import android.view.MenuItem;  
  6.   
  7. import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;  
  8. import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.CanvasTransformer;  
  9. import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;  
  10.   
  11. public class MainActivity extends SlidingFragmentActivity {  
  12.     private CanvasTransformer mTransformer;  
  13.   
  14.     @Override  
  15.     public void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.   
  18.         setTitle("Zoom");  
  19.           
  20.         initAnimation();  
  21.           
  22.         initSlidingMenu();  
  23.           
  24.         getActionBar().setDisplayHomeAsUpEnabled(true);  
  25.     }  
  26.   
  27.     /** 
  28.      * 初始化滑动菜单 
  29.      */  
  30.     private void initSlidingMenu(){  
  31.         // 设置主界面视图  
  32.         setContentView(R.layout.content_frame);  
  33.         getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, new SampleListFragment()).commit();  
  34.                   
  35.         // 设置滑动菜单视图  
  36.         setBehindContentView(R.layout.menu_frame);  
  37.         getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame, new SampleListFragment()).commit();  
  38.   
  39.         // 设置滑动菜单的属性值  
  40.         SlidingMenu sm = getSlidingMenu();        
  41.         sm.setShadowWidthRes(R.dimen.shadow_width);  
  42.         sm.setShadowDrawable(R.drawable.shadow);  
  43.         sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);  
  44.         sm.setFadeDegree(0.35f);  
  45.         sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);  
  46.         sm.setBehindScrollScale(0.0f);  
  47.         sm.setBehindCanvasTransformer(mTransformer);  
  48.           
  49.         setSlidingActionBarEnabled(true);  
  50.     }  
  51.   
  52.     /** 
  53.      * 初始化动画效果 
  54.      */  
  55.     private void initAnimation(){  
  56.         mTransformer = new CanvasTransformer(){  
  57.             @Override  
  58.             public void transformCanvas(Canvas canvas, float percentOpen) {  
  59.                 float scale = (float) (percentOpen*0.25 + 0.75);  
  60.                 canvas.scale(scale, scale, canvas.getWidth()/2, canvas.getHeight()/2);                
  61.             }  
  62.               
  63.         };  
  64.     }  
  65.       
  66.     @Override  
  67.     public boolean onOptionsItemSelected(MenuItem item) {  
  68.         switch (item.getItemId()) {  
  69.         case android.R.id.home:  
  70.             toggle();  
  71.             return true;          
  72.         }  
  73.         return super.onOptionsItemSelected(item);  
  74.     }  
  75.       
  76. }  


大家可以先看一遍上面的这段代码,要想实现动画效果主要有三个步骤:

<1> 先定义一个CanvasTransformer接口对象,这个接口是在slidingmenu_library类库中封装好的,所以要想运行此项目还要导入slidingmenu_library类库,这个导入的方法已经在前面详细的介绍过了,不清楚的同学可以参考:

【Android UI设计与开发】第16期:滑动菜单栏(一)开源项目SlidingMenu的使用

[java] view
plain
copy

  1. private CanvasTransformer mTransformer;  


<2> 然后再实例化此接口,重写接口中的方法:

[java] view
plain
copy

  1. mTransformer = new CanvasTransformer(){  
  2.             @Override  
  3.             public void transformCanvas(Canvas canvas, float percentOpen) {  
  4.                 float scale = (float) (percentOpen*0.25 + 0.75);  
  5.                 canvas.scale(scale, scale, canvas.getWidth()/2, canvas.getHeight()/2);                
  6.             }  
  7.               
  8.         };  

我们可以看到在transformCanvas(Canvas canvas, float percentOpen)方法中,有两个参数:

① Canvas canvas:画布类;

② float percentOpen:滑动菜单栏打开时的百分比值。


<3> 最后在把实例化的接口对象赋给SlidingMenu类中的setBehindCanvasTransformer()方法:

[java] view
plain
copy

  1. sm.setBehindCanvasTransformer(mTransformer);  


这样,一个滑动菜单栏打开时的动画效果就配置好了,怎么样?还是很简单的吧。

 

 

二、SlidingMenu动画效果示例二

 

1、示例二效果图

 

该示例主要实现了当滑动菜单栏打开时滑动伸缩的效果,大家通过两站效果图的对比可以很清楚的看到。

                  

抱歉!评论已关闭.