DevStore首页 > DEV资源 > 源码下载 > 源码详情

Android应用源码可以自定义文字的烟花绽放动画效果

 
阿斯顿0124 | 2014-08-26 19:24    浏览量(8664)    评论(11)    收藏(7)
功能分类:特效 支持平台:Android 运行环境:Android
开发语言:Java 开发工具:Eclipse 源码大小:5.08MB
下载源码 1246 人下载

源码简介

本项目是一个可以输入自定义文字和设定文字大小的烟花动画效果项目源码,打开项目以后在主界面长按4秒就会出现设置界面,可以自定义烟花绽放后出现的文字,项目用到了大量的绘图和算法,感兴趣的朋友可以下载研究一下,编译版本4.0.3默认编码GB2312有注释。

源码截图

  • 源码运行截图
  • 源码运行截图
  • 源码运行截图
  • 源码运行截图
  • 源码运行截图
  • 源码运行截图
DevStore所有源码来自用户上传分享,版权问题及牵扯到商业纠纷均与DevStore无关。

源码片段

public class MyView extends View {

	final String LOG_TAG = MyView.class.getSimpleName();

	public static final int ID_SOUND_UP = 0;
	public static final int ID_SOUND_BLOW = 1;
	public static final int ID_SOUND_MULTIPLE = 2;
	final static int TIME = 5; // 圈数

	private Vector lList = new Vector();

	LittleDot[] ld = new LittleDot[200];
	private DotFactory df = null;

	boolean running = true;

	Bitmap backGroundBitmap;

	Context mContext;

	public static SoundPlay soundPlay;

	public MyView(Context context, String fireworkText,int fireworkSize) {
		super(context);
		// TODO Auto-generated constructor stub
		df = new DotFactory();
		
		//added by Dumbbell Yang at 2014-05-03
		if ((fireworkText.equals("") == false) && (fireworkSize > 10)){
			df.fireworkText = fireworkText;
			df.fireworkSize = fireworkSize;
		}
		
		new MyThread().start();
		mContext = context;
		backGroundBitmap = ReadBitMap(mContext, R.drawable.night);
		backGroundBitmap = resizeImage(backGroundBitmap, 480, 800);
		initSound(mContext);

	}

	public static void initSound(Context context) {
		soundPlay = new SoundPlay();
		soundPlay.initSounds(context);
		soundPlay.loadSfx(context, R.raw.up, ID_SOUND_UP);
		soundPlay.loadSfx(context, R.raw.blow, ID_SOUND_BLOW);
		soundPlay.loadSfx(context, R.raw.multiple, ID_SOUND_MULTIPLE);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		canvas.drawBitmap(backGroundBitmap, 0, 0, null);
		synchronized (lList) {
			for (int i = 0; i < lList.size(); i++) {
				lList.get(i).myPaint(canvas, lList);
			}
		}
		invalidate();
	}

	public boolean isRunning() {
		return running;
	}

	public void setRunning(boolean running) {
		this.running = running;
	}

	public Bitmap ReadBitMap(Context context, int resId) {
		BitmapFactory.Options opt = new BitmapFactory.Options();
		opt.inPreferredConfig = Bitmap.Config.RGB_565;
		opt.inPurgeable = true;
		opt.inInputShareable = true;
		// 获取资源图片
		InputStream is = context.getResources().openRawResource(resId);
		return BitmapFactory.decodeStream(is, null, opt);
	}

	public Bitmap resizeImage(Bitmap mBitmap, int w, int h) {
		Bitmap BitmapOrg = mBitmap;
		int width = BitmapOrg.getWidth();
		int height = BitmapOrg.getHeight();
		int newWidth = w;
		int newHeight = h;
		float scaleWidth = ((float) newWidth) / width;
		float scaleHeight = ((float) newHeight) / height;

		Matrix matrix = new Matrix();
		matrix.postScale(scaleWidth, scaleHeight);
		Bitmap tmp = Bitmap.createBitmap(BitmapOrg, 0, 0, width, height,
				matrix, true);
		return tmp;
	}

	class MyThread extends Thread {
		// 新建一个进程类来处理重画
		// 用于控制烟火在空中滞留的时间
		int times = 0;

		public void run() {
			Dot dot = null;
			while (running) {

				try {
					Thread.sleep(100);
				} catch (Exception e) {
					System.out.println(e);
				}

				synchronized (lList) {
					// 防止画面的烟花个数多于50个
					while (lList.size() > 50) {
						System.out.println("当前数目超过50");
						for (int i = 0; i < 10; i++) {
							lList.remove(i);
						}
					}

					// 自动添加烟火
					if (lList.size() <= 2) {
						Dot tmp = null;
						int rand = (int) (Math.random() * 99);
						Random random = new Random();
						tmp = df.makeDot(mContext, rand, random.nextInt(480),
								50 + random.nextInt(300));
						lList.add(tmp);
					}

				}

				for (int i = 0; i < lList.size(); i++) {
					dot = (Dot) lList.get(i);
					if (dot.state == 1 && !dot.whetherBlast()) {
						dot.rise();
					}
					// 如果是whetherBlast()返回的是true,那么就把该dot的state设置为2
					else if (dot.state == 1 && dot.state != 2) {
						dot.state = 2;
						soundPlay.play(ID_SOUND_BLOW, 0);
					} else if (dot.state == 3) {

					}
					// 规定,每个爆炸点最多是TIME圈,超过就会消失
					if (dot.circle >= TIME) {
						// 在空中滞留一秒才消失
						if (times >= 10) {
							dot.state = 4;
							times = 0;
						} else {
							times++;
						}
						// dot.state = 4;
					}
				}
			}
		}
	}
	
}
  •   赞(3) 赞 +1 赞(3) 已赞
  •   收藏(7) 收藏 +1 已收藏 取消
  •   下载(1246)
评论(11)
财迷

财迷 2016-05-28 00:27:54

没看出来效果啊!
回复(0) 赞(0) 赞(1)
androidDayDayUP

androidDayDayUP 2015-07-01 17:16:57

感谢分享!!
回复(0) 赞(0) 赞(1)
枫髓液烙

枫髓液烙 2015-04-01 17:58:08

虽然感觉没撒用 但是还是谢谢了
回复(0) 赞(0) 赞(1)
tick_tok

tick_tok 2014-12-16 16:42:41

没看出来效果啊!
回复(0) 赞(0) 赞(1)
学海无涯

学海无涯 2014-11-03 13:39:18

感谢分享!!!
回复(0) 赞(0) 赞(1)
  • 推荐
  • 审核
  • 收录
  • 获取活力值

源码上传作者

  • 6 能力值
  • 3 源码
  • 0 评测
  • 0 资料
擅长: SEO 推广 动画特效

热门源码