`
zxl_ong
  • 浏览: 128738 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

打造自己的动画效果

阅读更多
当我们的软件基本功能都实现了之后,我们是不是还可以把它做的更好呢?一个能让用户体验明显提升的方法,就是为我们的应用适当的增加一些动画效果,Android系统中已经为我们内置了几个常用的动画,基本满足我们日常的需要。但是如果我们的需求比较特殊,需要实现自己特定的动画效果又改怎么办呢?下面就为大家介绍一下。
      整体来说Android中的动画,就是一个线性变换,学过线性代数的同学肯定不陌生拉~通过增加变换矩阵,就可以实现我们向要的各种效果,当然,如果你的数学不是很好,也没有关系,因为具体的数学细节android已经封装很多了,我们要做的只是调用相应的接口就可以了。
     首先,我们要继承Animation类,并实现它的applyTransformation方法,这个方法是一个回调方法,在动画进行的过程中,系统会一直不停的调用这个方法,每次调用,这个方法给我们传进来一个变换矩阵,通过对这个矩阵的操作,我们就可以实现自己的动画效果了,例如下面的代码:

  
1. public class MyAnimation extends Animation {
   2.

   3.     private int halfWidth;
   4.    
   5.     private int halfHeight;
   6.    
   7.     @Override
   8.     public void initialize(int width, int height, int parentWidth,
   9.             int parentHeight) {
  10.         
  11.         super.initialize(width, height, parentWidth, parentHeight);
  12.         setDuration(1500);
  13.         setFillAfter(true);
  14.         
  15.         halfWidth = width / 2;
  16.         halfHeight = height / 2;
  17.         setInterpolator(new LinearInterpolator());
  18.         
  19.         
  20.     }
  21.    
  22.    
  23.     @Override
  24.     protected void applyTransformation(float interpolatedTime, Transformation t) {
  25.             
  26.         final Matrix matrix = t.getMatrix();
  27.         matrix.preScale(interpolatedTime, interpolatedTime);      
  28.         matrix.preRotate(interpolatedTime * 360);        
  29.         matrix.preTranslate(-halfWidth, -halfHeight);
  30.         matrix.postTranslate(halfWidth, halfHeight);
  31.         
  32.     }
  33. }


复制代码
在initialize方法中,我们首先设置了动画的时间,1.5 秒,然后是setFillAfter,这个方法设置成true的意思是在动画结束后保持动画效果,如果这里不明白可以忽略这个,不影响大局。接下来是保存动画对象的中点坐标,随后会用到,最后一行的意思是线性动画,这个的意思就是整个动画的速率是不变的,也就是线性的。
      在下面的applyTransformation方法中,我们首先取得到了变换矩阵,然后对这个矩阵进行了两个变换操作:

      matrix.preScale(interpolatedTime, interpolatedTime);     
      这个方法是进行缩放,传给它的参数interpolatedTime 代表当前方法掉用时,动画进行的一个时间点,这个值的范围是0到1,也就是说动画刚开始的时候传进来的interpolatedTime为0,动画进行中的时候,传进来的是0到1之间的小数,动画结束的时候传进来的是1。
      而preScale方法接受的两个参数也是0到1,代表缩放的比例,0是最小,1是原始尺寸。
      所以这个变换的意思就是,以当前动画进行的时间为参考,逐渐放大我们的可见对象。再说白了,就是从一个点,慢慢放大,最后恢复到原始尺寸,这样的效果。
     
      matrix.preRotate(interpolatedTime * 360);  
      这个方法是旋转动画,和上面的一样,根据动画的时间,将可见对象旋转一周,应该不难理解。
      这两个变换叠加再一起,就实现了一个这样的效果,我们的可见对象从画面正中央,旋转着逐渐放大,最终充满可见区域。 
  
      matrix.preTranslate(-halfWidth, -halfHeight);
      matrix.postTranslate(halfWidth, halfHeight);    

      这两行代码意思可能就不那么明显了,先说如果不加这两行代码,会是一个什么情况,默认情况下,动画是以对象的左上角为起点的,如果这样的话,动画的效果就变成了可见对象在它的左上角开始,逐渐向右下角扩大,这显然不是我们期望的。
     所以我们前面用到的halfWidth,halfHeight就用到了,这里保存了可见对象的一半宽度和高度,也就是中点,使用上面这两个方法后,就会改变动画的起始位置,动画默认是从右下角开始扩大的,使用matrix.preTranslate(-halfWidth, -halfHeight) 就把扩散点移到了中间,同样,动画的起始点为左上角,使用matrix.postTranslate(halfWidth, halfHeight)就把起始点移到了中间,这样就实现我们期望的效果了。

     接下来我们要做的就是应用这个动画,首先需要一个Activity,和一个布局文件:

   1. <?xml version="1.0" encoding="utf-8"?>
   2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   3.     android:orientation="vertical"
   4.     android:layout_width="fill_parent"
   5.     android:layout_height="fill_parent"
   6.     >
   7. <Button
   8.         android:id="@+id/btn_animate"
   9.         android:layout_width="fill_parent"
  10.         android:layout_height="wrap_content"
  11.         android:text="开始动画"
  12. />
  13. <ListView
  14.         android:id="@+id/list_view_id"
  15.         android:persistentDrawingCache="animation|scrolling"
  16.         android:layout_width="fill_parent"
  17.         android:layout_height="fill_parent"
  18. />
  19. </LinearLayout>
20.


复制代码
这里定义了一个ListView,我们将用它作为我们的动画对象,下面是Activity的代码:

   1. public class Main extends Activity {
   2.     /** Called when the activity is first created. */
   3.     @Override
   4.     public void onCreate(Bundle savedInstanceState) {
   5.         super.onCreate(savedInstanceState);
   6.         setContentView(R.layout.main);
   7.         
   8.         ListView list = (ListView)findViewById(R.id.list_view_id);
   9.         
  10.         String[] data = new String[] {"测试数据","测试数据","测试数据","测试数据","测试数据","测试数据","测试数据"};
  11.         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,data);
  12.         
  13.         list.setAdapter(adapter);
  14.         Button b = (Button)this.findViewById(R.id.btn_animate);
  15.         b.setOnClickListener(new OnClickListener() {
  16.             
  17.             public void onClick(View v) {
  18.                
  19.                 ListView list = (ListView)findViewById(R.id.list_view_id);
  20.                 list.startAnimation(new MyAnimation());
  21.                
  22.             }
  23.         });
  24.     }
  25.    
  26.    
  27. }


复制代码
这里通过一个按钮来开启动画效果,关键的代码就是这一行:
                list.startAnimation(new MyAnimation());


注:本文转自http://www.eoeandroid.com/thread-40071-1-1.html
分享到:
评论

相关推荐

    超炫button按钮动画效果

    - 继承`Button`类,重写`onDraw()`方法,绘制自己的动画效果。 - 使用`Canvas`和`Paint`对象绘制动态图形,如旋转、缩放、平移等。 4. **触摸反馈**: - 设置`android:background="?android:attr/...

    Android动画效果大全

    在Android开发中,动画效果是提升用户体验和应用视觉吸引力的关键元素。本文将深入探讨"Android动画效果大全",包括各种类型的动画以及如何基于这些技术实现炫酷的特效。 首先,Android提供两种主要的动画机制:帧...

    纯ppt打造电影开头动画效果模板.rar

    标题中的“纯ppt打造电影开头动画效果模板”指的是使用Microsoft PowerPoint这一常见的演示文稿软件来创建电影开场动画的效果。在电影行业中,精美的开场动画往往能吸引观众的注意力,为影片增色不少。通过PPT制作...

    动画效果的deMo

    在IT领域,动画效果是提升用户体验和视觉吸引力的重要手段,特别是在网页和用户界面设计中。...对于这个"动画效果的Demo",我们可以期待一个利用现代Web技术精心打造的,充满活力且用户体验卓越的示例。

    打造仿奥运开幕式卷轴动画效果.doc

    ### IT知识点:打造仿奥运开幕式卷轴动画效果的Flash教程详解 #### 1. Flash基础知识与界面介绍 在深入分析如何打造仿奥运开幕式卷轴动画效果之前,我们首先需要了解Flash的基本概念及其工作界面。Adobe Flash(现...

    页面跳转的动画效果

    在网页设计中,页面跳转的动画效果是一个重要的组成部分,它不仅...以上就是关于"页面跳转的动画效果"的一些主要知识点,结合实际项目需求和用户反馈,开发者可以灵活运用这些技术,打造出既美观又实用的页面跳转动画。

    安卓动画效果相关-设置path的各种动画效果以及如何类似于ios中的指纹注册界面的指纹动画效果.zip

    在安卓开发中,动画效果是提升用户体验的重要手段之一。本资料包主要关注的是基于Path的动画...通过研究和模仿这些代码,你可以提高自己在Android图形和动画编程方面的技能,从而打造出更加生动和吸引人的应用程序。

    又一个CSS3翻书动画效果.rar

    《CSS3实现翻书动画效果详解》 在网页设计领域,动态效果的运用极大地提升了用户体验,其中CSS3的翻书动画效果就是一种极具吸引力的技术。本文将深入探讨如何利用CSS3来实现逼真的翻书动画,同时也会分析并讨论这款...

    android加入购物车动画效果

    在Android开发中,实现“加入购物车”的动画效果是一个提升用户体验的重要环节。...通过实践这些步骤,你可以为自己的Android应用打造一个类似“乐蜂网”的流畅购物车动画体验,提升用户的操作满意度。

    多种dialog 动画效果

    在本文中,我们将深入探讨如何自定义Dialog并实现多种动画效果,包括从底部、顶部出现、中间震动以及ListView的动画效果,这些都是在商业项目中提升用户体验的重要手段。 首先,我们来看如何创建一个自定义Dialog。...

    ppt打造倒计时动画效果.ppt

    在PPT中创建倒计时动画效果是一种吸引观众注意力并营造紧张氛围的高效方式,尤其适用于活动开场、会议...通过熟练掌握这些技巧,你还可以根据自己的需求自定义更多复杂的动画效果,为你的演示文稿增添专业性和趣味性。

    Android动画效果集合开源APP(BaseAnimation1.3)程序源码

    BaseAnimation1.3版本增加如下动画 1.Splash增加2个动画 2.高仿动画效果增加10个 3.ListView集合增加15...如果有新版本会自动提醒大家更新 也希望大家多多贡献自己的动画xml文件或者其他源码 一起来打造这个开源的app

    巧用PowerPoint2021打造动画效果.docx

    ### 巧用PowerPoint2021打造动画效果 #### 一、背景介绍 随着办公软件的不断更新迭代,Microsoft PowerPoint作为一款强大的演示文稿制作工具,在2021版中引入了许多新特性与改进,使得用户能够更加轻松地创建出专业...

    阿里巴巴首页图片动画效果

    在IT行业中,动画效果是网页设计中不可或缺的一部分,它能够提升用户体验,使网站更具吸引力。...在实际开发中,开发者需要综合考虑性能、兼容性和用户体验,灵活运用这些技术来打造自己的动画效果。

    app引导页(背景图片切换加各个页面动画效果)

    "app引导页(背景图片切换加各个页面动画效果)"这个主题聚焦于如何在引导页设计中加入动态元素,如背景图片的平滑切换和各页面间的动画效果,以提升用户体验和吸引用户的注意力。 一、背景图片切换 背景图片切换是...

    Android各种动画效果集合(旋转动画+折叠翻转+点赞动画+折叠书架+按钮切换动画+模糊动画等等)

    本文将深入探讨在Android中实现的各种动画效果,包括旋转动画、折叠翻转、点赞动画、折叠书架、按钮切换动画以及模糊动画等。 1. **旋转动画**: 旋转动画在Android中可以通过` RotateAnimation `类来实现。开发者...

    ExpandableListView打造带折叠动画效果的多条目展示框架

    使用ExpandableListView打造的可折叠的多条目布局的效果,每个Item里面的布局都可以自己定义,并且扩展了ExpandableListView的功能添加了折叠动画的效果。 项目使用AS2.3和gradle_3.3构建 Github下载地址: ...

    页面跳转动画效果

    在Android开发中,页面跳转动画效果是提升用户体验的重要手段之一。"页面跳转动画效果"通常指的是在Activity之间...在实际开发中,开发者可以根据自己的需求和设计风格,灵活运用这些动画效果,打造个性化的移动应用。

    wpf动画效果

    在Windows Presentation Foundation(WPF)中,动画效果是构建用户界面和增强用户体验的重要工具。WPF的动画系统允许开发者创建动态、引人入胜的视觉效果,这些效果可以应用于各种UI元素,如窗体、控件、图像等。本...

Global site tag (gtag.js) - Google Analytics