学习Jammendo代码的心路历程(一)简单的淡出效果实现

  最近在看 Jammendo代码,打算将学习过程简单的记录下来,下面开始第一篇:

  打开Jammendo运行之后,出弹出一个对话框,跳过对话框之后,会有一个淡出界面跳转到首页效果的实现。那么这个效果是怎么实现的呢,其实就是Animation中动画淡出的效果——原理大概是layout不透明变成全透明这样一个原理。

  我这里用到的自定义endAnimation,是执行的动画效果,这里找到我事先写好的fade_out.xml,也就是一个简单的淡出效果实现:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <alpha
   android:fromAlpha="1.0"
   android:toAlpha="0.0"
   android:duration="500"
   />
</set> 

  fromAlpha为动画起始透明度,toAlpha是动画结束透明度,duration顾名思义也就是动画持续时间,当然有淡出也会有淡入,编写原理差不多,网上有相关代码,也可以自己去查找一下,很简单。

  OK,看完上面的动画xml文件之后。。下面开始看在Activity中代码应该如何编写

  在这里,我利用Handler和Runnable实现简单的动画淡出效果,android中动画效果是基于Animation来实现的,简单的说下实现的淡出效果实现

 1 public class SplashscreenActivity extends Activity {
 2     private Animation endAnimation;
 3     private Handler endAnimationHandler;
 4     private Runnable endAnimationRunnable;
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         // TODO Auto-generated method stub
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.splashlayout);
10         endAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out);
11         endAnimation.setFillAfter(true);
12
13         endAnimationHandler = new Handler();
14         endAnimationRunnable = new Runnable() {
15             @Override
16             public void run() {
17                 findViewById(R.id.splashlayout).startAnimation(endAnimation);
18             }
19         };
20
21         endAnimation.setAnimationListener(new AnimationListener() {
22             @Override
23             public void onAnimationStart(Animation animation) {    }
24
25             @Override
26             public void onAnimationRepeat(Animation animation) { }
27
28             @Override
29             public void onAnimationEnd(Animation animation) {
30 //                HomeActivity.launch(SplashscreenActivity.this);
31 //                SplashscreenActivity.this.finish();
32             }
33         });
34
35         endAnimationHandler.removeCallbacks(endAnimationRunnable);
36         endAnimationHandler.postDelayed(endAnimationRunnable, 2000);
37     }
38
39 }

SplashScreenActivity

  首先我定义了一个endAnimation,endAnimation是执行的动画效果,这里找到我事先写好的fade_out.xml,也就是一个简单的淡出效果实现,然后利用AnimationUtils.loadAnimation加载编写好的动画效果。

  在这里有一个SetFillAfter(true)函数,我搜了一下资料,大概解释是这样的:

  SetFillAfter()方法用于设置一个动画执行完毕后,View对象保留在中指的位置,如果设置为false,表示使能,也就是不会停留在终止位置,在这里我们设置为false。

  之后定义的一个endAnimationHadler和一个endAnimationRunnable,是具体调用这个动画的线程,Handler处理多线程的时候通常用Runnable接口,关于这个我也不太懂,就不多提。

  

  endAnimationHandler = new Handler();  endAnimationRunnable = new Runnable() {    public void run() {
          findViewById(R.id.splashlayout).startAnimation(endAnimation);
        }
   };

具体的动画效果调用将会在endAnimationRunnable的Run()方法中实现,可以看到在run方法中,我利用findViewById找到了一个splashlayout,这个splashlayout是当前activity布局中layout资源的id,而不是整个xxx.xml文件的id。在之前的过程中,很长时间发现工程无法运行,后来发现我一直用的是R.layout.splashlayout。这里需要注意,我们添加的不是xml布局,而是xxx.xml文件中layout资源的id。如下所示:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/splashlayout"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        android:id="@+id/splashtextview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        ></TextView>
</LinearLayout>

  接下来就是为endAnimation实现一些onAnimationStart,onAnimationRepeat,onAnimationEnd回调方法,在onAnimationEnd方法中,也就是动画效果结束之后,我们可以执行一些自定的事件,例如页面的跳转等。

  上面过程完成之后,就可以调用Hadler来执行我们完成的动画淡出效果了,代码如下:

 endAnimationHandler.removeCallbacks(endAnimationRunnable);
  endAnimationHandler.postDelayed(endAnimationRunnable, 2000);

OK,上面就是一个简单淡出效果的实现,写于4月6日

时间: 2024-10-12 21:53:34

学习Jammendo代码的心路历程(一)简单的淡出效果实现的相关文章

关于代码效率提升的方法心路历程(购物车)

关于代码效率提升的方法心路历程(购物车) 给为园友们,大家好,最近一直解决执行提速,分析老代码的逻辑并提出优化方案,在这个过程中发现了很多不好的习惯,导致很多程序逻辑执行效率低下,现在将其总结一下,如果大家觉得有参考意义,就看一下,如果觉得有问题,多多指点,如果觉得写的不好,也勿喷,谢谢! 案例分析: 关于购物车效率的提升,在优化前,购物车需要3-5分钟才能够查询出来数据,并且购物所有商品全部刷新重新渲染.这个购物车计算价格的代码还是一个工作20年左右的前辈写的,并且找了很久的优化方案(只局限在

从一个程序员到一个销售高手的心路历程

从一个程序员到一个销售高手的心路历程 0.引言 我大学本科读的是理工科,后来毕业以后,我逐渐走上了程 序员的道路.每天面对电脑一行一行的敲代码,这被我们程序员们戏称为“搬砖头”,因为我们所做的事跟民工搬砖头砌墙本质上是相同的,我们也是把一堆代码从 一个地方搬到另一个地方,然后改改让它面子上看起来挺好看,用起来结实耐用就算完工了. 干了6年的技术以后,我放弃了已做的非常 好的技术和积累起来的成绩,转而从0开始去做销售.后来经过自己的努力,我终于成长为一个销售和业绩翻倍高手,在销售和业绩翻倍方面取得

顶级项目孵化的故事系列——Kylin的心路历程【转】

现在已经名满天下的 Apache Kylin,是 Hadoop 大数据生态系统不可或缺的一部分,要知道在 Kylin 项目早期,可是以华人为主的开源团队,一路披荆斩棘经过几年的奋斗,才在 Apache 基金会牢牢的巩固了自己的位置.作为本土第一个进入到世界顶级基金会的项目,Kylin 的经验是值得大家学习的. 以下内容根据 COSCon'17讲师史少锋(Apache Kylin PMC&Committer .Kyligence 技术合伙人兼高级架构师)的演讲速记所整理. 演讲实录 今天我主要介绍

一个C#开发者重温C++的心路历程

前言 这是一篇C#开发重新学习C++的体验文章. 作为一个C#开发为什么要重新学习C++呢?因为在C#在很多业务场景需要调用一些C++编写的COM组件,如果不了解C++,那么,很容易注定是要被C++同事忽悠的. 我在和很多C++开发者沟通的时候,发现他们都有一个非常奇怪的特点,都很爱装X,都觉得自己技术很好,还很爱瞧不起人:但如果多交流,会发现更奇怪的问题,他们几乎都不懂代码设计,代码写的也都很烂. 所以,这次重温C++也是想了解下这种奇异现象的原因. C++重温 首先打开VisualStudi

VS2012+EF6+Mysql配置心路历程

原文:VS2012+EF6+Mysql配置心路历程 为了学习ORM,选择了EntityFramework,经历了三天两夜的煎熬,N多次错误,在群里高手的帮助下,终于成功,现在将我的心路历程记录下来,一是让自己有个记录,另外就是让其它人少走些弯路. 我的开发环境是Win7+VS2012,数据库环境是Ubuntu12.04+MySQL+Mono+Jexus 计划开发完后整个运行在Linux下. 1.下载MySQL Connector/Net 6.8.3 地址:http://dev.mysql.com

优云老王的心路历程(一):那个做了五年的产品经理

前言: 老王的五年产品经理心路历程,对拍脑袋式产品决策的反思,及如何建立产品用户体验监控体系. 我从2003年"误入"运维软件行业,并在2010年开始做产品经理,5年来,我始终和优秀的团队在一起,从零开始创造了ITSM.CMDB产品,并得到了很多用户的认可.但不怕大家笑话,这5年中,我内心其实无比的纠结.面对产品的历次迭代,一方面要做出对用户有价值的功能,要说服开发团队去落地:另一方面担心产品过于复杂用户不买账,而对功能的裁剪却不敢轻易动刀.例如产品是站为用户领导设计还是为真正的用户操

最近的心路历程非常之多

1.<老王和他的IT界朋友>能给我们带来什么 最近的心路历程非常之多,每次到了每年的这个时候,我总喜欢停下来,好好写写东西,感觉越来越力不从心.看到之前写的东西,总是很惊讶那样的文字也会出自我手. 最近姥爷有点身体不适,我推着他跑了跑医院,这才知道我们每个人其实都不是自己所想象的那样,并不是自己所想象的那样健康,我想做一个公众号,或者说一个订阅号,默默的记录我们身边的IT界人的心路历程,希望透过我们并不是很幼稚的文字记录自己的成长,同时给予其他看到这些文字的人 ,看到这些文字的攻城狮,程序员.

VS2013+EF6.1+Mysql配置心路历程

为了学习ORM,选择了EntityFramework,经历了三天两夜的煎熬,N多次错误,在群里高手的帮助下,终于成功,现在将我的心路历程记录下来,一是让自己有个记录,另外就是让其它人少走些弯路. 我的开发环境是Win8+VS2013,数据库环境是MySQL(WampServer) 1.下载MySQL Connector/Net 6.8.3 地址:http://dev.mysql.com/downloads/connector/net/ 还需要下载一个MySQL  for VisualStudio

写点什么...记录一下学习过程中的心路历程

讲真"好脑子比不上烂笔头"这句话让我产生了深深的认同感... Python自学已经一个多月了,天天在视频,书本的连环轰炸下,稀里糊涂的记住了不少的东西,摆脱了看代码两眼一抹黑的尴尬境遇.各种结构惊奇的代码,看起来也有一种似曾相识的感觉,让人不禁有一种错觉"我似乎是会编程了!!!""我是个天才!!!"...... 还总有人说编程难,我看也没什么嘛,这不是一个月就能搞定了嘛.走起,直接搞起来.依稀记得视频中有过几个实例,那我也来自己实现一下. 打开之