安卓案例:闪烁满天星

安卓案例:闪烁满天星

一、运行效果

安卓案例:闪烁满天星_第1张图片

安卓案例:闪烁满天星_第2张图片

星星的位置和颜色都会不断地变化。

二、涉及知识点

1、自定义视图

2、定时器

3、定时器任务

4、线程

三、实现步骤

1、创建安卓应用StarrySky

安卓案例:闪烁满天星_第3张图片

2、准备月亮图片moon.jpg,拷贝到mipmap目录里

安卓案例:闪烁满天星_第4张图片

3、创建自定义视图类CustomView

安卓案例:闪烁满天星_第5张图片

package net.hw.starry_sky;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.view.View;

/**
 * Created by howard on 2018/3/9.
 */

public class CustomView extends View {
    /**
     * 画笔
     */
    private Paint paint;
    /**
     * 屏幕宽度
     */
    private int screen_width;
    /**
     * 屏幕高度
     */
    private int screen_height;
    /**
     * 刷频次数
     */
    private int count;

    /**
     * 构造方法:将自定义视图绑定到窗口
     *
     * @param context
     */
    public CustomView(Context context) {
        super(context);
		/* 通过窗口管理器对象获得手机屏幕尺寸 */
        screen_width = ((Activity) context).getWindowManager()
                .getDefaultDisplay().getWidth();
        screen_height = ((Activity) context).getWindowManager()
                .getDefaultDisplay().getHeight();
    }

    /**
     * 绘制方法:利用画笔对象在画布上绘制文本、图形和图像
     */
    @Override
    public void draw(Canvas canvas) {
        super.draw(canvas);
        // 实例化画笔对象
        paint = new Paint();

		/* 将画布底色变成全黑 */
        // 设置画笔为黑色
        paint.setColor(Color.BLACK);
        canvas.drawRect(new Rect(0, 0, screen_width, screen_height), paint);

		/* 根据刷屏次数来设置画笔颜色 */
        switch (count) {
            case 0:
                // 画笔设置为绿色
                paint.setColor(Color.GREEN);
                break;
            case 1:
                // 画笔设置为白色
                paint.setColor(Color.WHITE);
                break;
            case 2:
                // 画笔设置为黄色
                paint.setColor(Color.YELLOW);
                break;
        }

        // 确保count只能取0、1、2
        count = ++ count % 3;

        for (int i = 0; i < 200; i++) {
            canvas.drawText("★", (int) (Math.random() * screen_width),
                    (int) (Math.random() * screen_height), paint);
        }

        // 绘制位图
        Drawable drawable = getResources().getDrawable(R.mipmap.moon);
        drawable.setBounds(new Rect(220, 90, 280, 150));
        drawable.draw(canvas);
    }
}

4、主界面类MainActivity

安卓案例:闪烁满天星_第6张图片

package net.hw.starry_sky;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {
    /**
     * 自定义视图
     */
    private CustomView mCustomView;
    /**
     * 线程
     */
    private Thread thread;
    /**
     * 线程循环控制变量
     */
    private boolean isRunning;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 实例化自定义视图
        mCustomView = new CustomView(this);
        // 将自定义视图作为用户界面
        setContentView(mCustomView);

        // 创建线程,刷新视图
        isRunning = true;
        thread = new Thread(new Runnable() {

            @Override
            public void run() {
                while (isRunning) {
                    try {
                        // 刷新自定义视图
                        mCustomView.postInvalidate();
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        // 启动线程
        thread.start();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        isRunning = false;
        thread = null;
    }
}

此时,运行程序,查看效果:

安卓案例:闪烁满天星_第7张图片

上面我们是利用线程来实现动画效果,下面我们修改主界面类代码,采用定时器来实现同样的效果。

5、修改主界面类MainActivity

package net.hw.starry_sky;

import android.app.Activity;
import android.os.Bundle;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends Activity {
    /**
     * 自定义视图
     */
    private CustomView mCustomView;
    /**
     * 定时器
     */
    private Timer timer;
    /**
     * 定时器任务
     */
    private TimerTask task;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 实例化自定义视图
        mCustomView = new CustomView(this);
        // 将自定义视图作为用户界面
        setContentView(mCustomView);

        // 创建定时器
        timer = new Timer();
        // 创建定时器任务
        task = new TimerTask() {
            @Override
            public void run() {
                // 刷新自定义视图
                mCustomView.postInvalidate();
            }
        };
        // 对定时器任务进行调度
        timer.schedule(task, 0, 100);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 取消定时器任务
        timer.cancel();
    }
}

运行程序,查看效果:

安卓案例:闪烁满天星_第8张图片

可以看到,漫天行星闪烁不停。

你可能感兴趣的:(安卓应用开发)