在Android中,通过创建透明度渐变动画(AlphaAnimation)可以实现图片由显示到逐渐隐藏,再逐渐显示的过程。通过这一个动画可以实现闪烁的星星,
####实现过程
(1)在新建项目的res目录中,首先创建一个名称为anim的目录,并在该目录中,添加一个名称为flare.xml的XML资源文件,在该文件中定义一个实现透明度渐变的动画,该动画为从完全不透明到完全透明,再到完全不透明的渐变过程,具体代码如下:
(2)修改新建项目的res/layout目录下的布局文件activity_main.xml,将默认添加的线性布局管理器和TextView组件删除,添加一个帧布局管理器,并在其中添加一个ImageView组件,代码如下:
(3)打开默认创建的MainActivity,在其onCreat方法中,首先获取定义的动画资源及要应用动画效果的ImageView组件,然后调用startAnimation方法应用动画效果,从而实现闪烁的星星。代码如下:
package com.example.shenfan.staralpha;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Animation flare = AnimationUtils.loadAnimation(this,R.anim.flare);//获取"透明度变化"动画资源
final ImageView iv = (ImageView)findViewById(R.id.imageView1);//获取要应用动画效果的ImageView
iv.setX(100);//设置星星的X坐标位置
iv.setY(50);//设置星星的Y坐标位置
iv.startAnimation(flare);//应用动画效果
}
}
简单来说就是,将背景图和星星都放在一个layout里面,然后给android:background添加背景图,然后再放置一个ImageView,在活动中,只需要将从ImageView获取的id,与另一个layout结合即可,而这另一个layout,就是放置的渐变。
可下载:
https://download.csdn.net/download/ancientear/10672407
在上述实例中也可以实现同时有多颗星星闪烁的效果
1、修改activity_main,在其中添加5个ImageView组件
2、打开之前的MainActivity,在其onCreat方法中,首先获取定义的动画资源及要应用动画效果的多个ImageView组件,并使用Java中的Random类随机获取ImageView组件的索引,然后饮用该索引调用startAnimation方法应用动画效果,从而实现同时有多个星星闪烁的效果。
package com.example.shenfan.staralpha;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.TextView;
import org.w3c.dom.Text;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
ImageView[] iv = new ImageView[5];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Animation flare = AnimationUtils.loadAnimation(this,R.anim.flare);//获取"透明度变化"动画资源
iv[0] = (ImageView)findViewById(R.id.imageView1);//获取要应用动画效果的ImageView
iv[1] = (ImageView)findViewById(R.id.imageView2);
iv[2] = (ImageView)findViewById(R.id.imageView3);
iv[3] = (ImageView)findViewById(R.id.imageView4);
iv[4] = (ImageView)findViewById(R.id.imageView5);
for(int i = 0 ; i < 5 ; i++) {
Random random = new Random(new java.util.Date().getTime() + i);
iv[i].setX(random.nextInt(200) + 50) ;//设置星星的X坐标位置
iv[i].setY(random.nextInt(20) + 5);//设置星星的Y坐标位置
iv[i].startAnimation(flare);//应用动画效果
}
}
}