学习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来实现的,其他复杂的效果这里就不提了,简单的说下实现的淡出效果实现


public class SplashscreenActivity extends Activity {
	
	private Animation endAnimation;
	private Handler endAnimationHandler;
	private Runnable endAnimationRunnable;
	private TextView textView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.splashlayout);
		textView = (TextView)this.findViewById(R.id.splashtextview);
		
		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);
	}

}

首先我定义了一个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</span>"
    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来执行我们完成的动画淡出效果了,代码如下
<span style="white-space:pre">	</span>endAnimationHandler.removeCallbacks(endAnimationRunnable);
	endAnimationHandler.postDelayed(endAnimationRunnable, 2000);
OK,上面就是一个简单淡出效果的实现,写于4月6日


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值