实现闪烁的星星

本文介绍如何在Android中利用AlphaAnimation实现星星闪烁效果。通过XML定义透明度渐变动画,应用于ImageView,实现多颗星星随机位置闪烁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Android中,通过创建透明度渐变动画(AlphaAnimation)可以实现图片由显示到逐渐隐藏,再逐渐显示的过程。通过这一个动画可以实现闪烁的星星,
####实现过程
(1)在新建项目的res目录中,首先创建一个名称为anim的目录,并在该目录中,添加一个名称为flare.xml的XML资源文件,在该文件中定义一个实现透明度渐变的动画,该动画为从完全不透明到完全透明,再到完全不透明的渐变过程,具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha = "1"//起始透明度,取值范围0.0--1.0 ,从完全透明到完全不透明
        android:toAlpha = "0"//  结束透明度,取值范围同上
        android:fillAfter = "true"//  动画结束后,保持结束时的状态
        android:repeatMode = "reverse"//重复模式,有reverse和restart两个值,前者为倒序回放,后者为重新开始
        android:repeatCount = "infinite"//  重复次数,取值为-1时无限重复,默认动画执行一次
        android:duration = "2000"//动画持续时间,毫秒为单位
    />
</set>

(2)修改新建项目的res/layout目录下的布局文件activity_main.xml,将默认添加的线性布局管理器和TextView组件删除,添加一个帧布局管理器,并在其中添加一个ImageView组件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/back"
    android:orientation="vertical">

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src = "@drawable/star"
    />

</FrameLayout>

(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.youkuaiyun.com/download/ancientear/10672407

在上述实例中也可以实现同时有多颗星星闪烁的效果

1、修改activity_main,在其中添加5个ImageView组件

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/back"
    android:orientation="vertical">

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src = "@drawable/star"
    />


        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src = "@drawable/star"
            />

        <ImageView
            android:id="@+id/imageView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src = "@drawable/star"
            />

        <ImageView
            android:id="@+id/imageView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src = "@drawable/star"
            />

        <ImageView
            android:id="@+id/imageView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src = "@drawable/star"
            />

</FrameLayout>

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);//应用动画效果
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Αиcíеиτеǎг

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值