zoukankan      html  css  js  c++  java
  • 学习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日
     
  • 相关阅读:
    JDBC_批量处理语句提高处理速度
    JDBC_获取插入记录的主键值
    JDBC_获取数据库连接
    SmartSprites 智能批量合并 CSS 雪碧图
    移动前端开发技巧摘录
    将已有项目提交到github/从github上pull到本地
    网页设计创新式布局与交互
    如何打好前端游击战
    jQuery Mobile十大常用技巧
    Javascript图片的懒加载与预加载
  • 原文地址:https://www.cnblogs.com/cfyrwang/p/4396944.html
Copyright © 2011-2022 走看看