Android时钟动画小尝试

我这个人比较懒,这次界面什么的,二话不说直接拖动(前提是设置成绝对布局才能题片重叠哦)
 
  

黑色的是时针最长的是秒针绿色的是分针,由于是用手拖进去的,界面很挫(此处不需吐槽!)

三个指针图片是自己截图得到的!

动画制作过程:

我采用的是补间动画,只用到了一种属性,就是旋转啦,哈哈。

首先介绍一下补间动画:补间动画作用于View对象,主要包括对View对象的位置、尺寸、旋转角度和透明度的变换。涉及的类有Animation、AnimationSet等,这些类都位于android.view.animation包下。补间动画通过一系列的指令来定义。和布局管理器一样,补间动画既可以在XML文件中声明,也可以在代码中动态定义。普通青年一般在XML文件定义动画,因为XML文件可读性及可用性高,而且便于替换。个别文艺青年会在Code中定义,但有时候是迫不得已要动态生成(比如我上一篇博文里面的ListView的Adapter中动态添加线性布局)。

补间动画的XML文件位于程序的res/anim目录下,(2B青年会问为什么他没有anim目录,这个我的确被问过),在XML文件中可以指定进行变换的种类、开始结束时间和持续时间。当需要在XML文件中定义多个变换时,需要将多个变换包含在一组标记中。


 
   
fromDegrees,toDegrees分别是起始角度和终止角度;pivotX和pivotY分别是旋转中心点的X和Y坐标,%代表是相对于View的位置;duration是持续时间,repeatCount是循环次数。我一共有三个这样的XML文件分别控制时针分针秒针。

package yxy.clock;

import android.app.Activity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class ClockActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView clock = (ImageView)findViewById(R.id.clock);
        ImageView second = (ImageView)findViewById(R.id.second);
        ImageView minute = (ImageView)findViewById(R.id.minute);
        ImageView hour = (ImageView)findViewById(R.id.hour);
        Animation animation1 = AnimationUtils.loadAnimation(ClockActivity.this, R.anim.second);//加载并获取Animation对象
        Animation animation2 = AnimationUtils.loadAnimation(ClockActivity.this, R.anim.minute);
        Animation animation3 = AnimationUtils.loadAnimation(ClockActivity.this, R.anim.hour);
        second.startAnimation(animation1);//启动动画
        minute.startAnimation(animation2);
        hour.startAnimation(animation3);
    }
}

这部分普通青年应该能理解。。。值得注意的是和帧动画的start方法不能在onCreat里面执行,但是我们用的是补间动画。

后记:

此程序构造简单以至于写博客的时间超出了写程序的时间。
这并不是真正的时钟因为没有获取系统时间,但是主要目的达到了:联系了动画。

如果想做的更像真的时钟:

取得系统时间long time=System.currentTimeMillis();
final Calendar mCalendar=Calendar.getInstance();
mCalendar.setTimeInMillis(time);
取得小时:mHour=mCalendar.get(Calendar.HOUR);
取得分钟:mMinuts=mCalendar.get(Calendar.MINUTE);

还有就是不要在XML里面定义补间动画,因为刚打开程序的时候三个指针的位置需要动态定义。我不知道是否有更高的解决方法,在Code里写补间动画或者在XML里面写,详细请看(又是一牛人)

http://blog.csdn.net/wangyuexiongqi/article/details/6616361


 
  
 
 

你可能感兴趣的:(补间动画,Android)