学习Jammendo代码的心路历程(一)简单的淡出效果实现
2015-04-06 22:43
357 查看
最近在看 Jammendo代码,打算将学习过程简单的记录下来,下面开始第一篇:
打开Jammendo运行之后,出弹出一个对话框,跳过对话框之后,会有一个淡出界面跳转到首页效果的实现。那么这个效果是怎么实现的呢,其实就是Animation中动画淡出的效果——原理大概是layout不透明变成全透明这样一个原理。
我这里用到的自定义endAnimation,是执行的动画效果,这里找到我事先写好的fade_out.xml,也就是一个简单的淡出效果实现:
fromAlpha为动画起始透明度,toAlpha是动画结束透明度,duration顾名思义也就是动画持续时间,当然有淡出也会有淡入,编写原理差不多,网上有相关代码,也可以自己去查找一下,很简单。
OK,看完上面的动画xml文件之后。。下面开始看在Activity中代码应该如何编写
在这里,我利用Handler和Runnable实现简单的动画淡出效果,android中动画效果是基于Animation来实现的,简单的说下实现的淡出效果实现
SplashScreenActivity
首先我定义了一个endAnimation,endAnimation是执行的动画效果,这里找到我事先写好的fade_out.xml,也就是一个简单的淡出效果实现,然后利用AnimationUtils.loadAnimation加载编写好的动画效果。
在这里有一个SetFillAfter(true)函数,我搜了一下资料,大概解释是这样的:
SetFillAfter()方法用于设置一个动画执行完毕后,View对象保留在中指的位置,如果设置为false,表示使能,也就是不会停留在终止位置,在这里我们设置为false。
之后定义的一个endAnimationHadler和一个endAnimationRunnable,是具体调用这个动画的线程,Handler处理多线程的时候通常用Runnable接口,关于这个我也不太懂,就不多提。
具体的动画效果调用将会在endAnimationRunnable的Run()方法中实现,可以看到在run方法中,我利用findViewById找到了一个splashlayout,这个splashlayout是当前activity布局中layout资源的id,而不是整个xxx.xml文件的id。在之前的过程中,很长时间发现工程无法运行,后来发现我一直用的是R.layout.splashlayout。这里需要注意,我们添加的不是xml布局,而是xxx.xml文件中layout资源的id。如下所示:
接下来就是为endAnimation实现一些onAnimationStart,onAnimationRepeat,onAnimationEnd回调方法,在onAnimationEnd方法中,也就是动画效果结束之后,我们可以执行一些自定的事件,例如页面的跳转等。
上面过程完成之后,就可以调用Hadler来执行我们完成的动画淡出效果了,代码如下:
OK,上面就是一个简单淡出效果的实现,写于4月6日
打开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来实现的,简单的说下实现的淡出效果实现
public class SplashscreenActivity extends Activity { private Animation endAnimation; private Handler endAnimationHandler; private Runnable endAnimationRunnable; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.splashlayout); endAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out); endAnimation.setFillAfter(true); endAnimationHandler = new Handler(); endAnimationRunnable = new Runnable() { @Override public void run() { findViewById(R.id.splashlayout).startAnimation(endAnimation); } }; endAnimation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { // HomeActivity.launch(SplashscreenActivity.this); // SplashscreenActivity.this.finish(); } }); endAnimationHandler.removeCallbacks(endAnimationRunnable); endAnimationHandler.postDelayed(endAnimationRunnable, 2000); } }
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日
相关文章推荐
- 学习Jammendo代码的心路历程(一)简单的淡出效果实现
- 学习历程(二)简单实现秒转换成对应天 小时 分钟 秒的代码
- 学习Jammendo代码的心路历程(二)ViewFlipper数据的填充
- JS 拖动效果实现代码 比较简单
- AjaxPanel自定义控件实现页面无刷新数据交互(做了个示例程序, 效果确实比较Cool, 用法非常简单! )(示例代码下载)
- 简单的jquery拖拽排序效果实现代码
- JS简单实用的倒计时效果实现代码
- 图片切换效果Xhtml简单实现,一句代码搞定!
- AjaxPanel自定义控件实现页面无刷新数据交互(做了个示例程序, 效果确实比较Cool, 用法非常简单! )(示例代码下载)
- javascript 简单抽屉效果的实现代码
- 最简单的js图片切换效果实现代码
- jQuery:简单6行代码实现tab效果
- JS简单实用的倒计时效果实现代码
- [导入]AjaxPanel自定义控件实现页面无刷新数据交互(做了个示例程序, 效果确实比较Cool, 用法非常简单! )(示例代码下载)
- Flex3学习轨迹:复合效果的简单实现
- J2ME 3D学习笔记——实现简单的界面(附代码)
- AjaxPanel自定义控件实现页面无刷新数据交互(做了个示例程序, 效果确实比较Cool, 用法非常简单! )(示例代码下载)
- 简单示例AJAX结合PHP代码实现登录效果代码
- Jquery选择器的概念以及选择器的学习一(基本、层级、简单,另有简单动画效果代码)
- Jquery实现简单的动画效果代码