android实现N滴雨(采用onTouchEvent触摸事件和线程)

哈喽大家好!经上次给大家分享了一滴雨

这次推出了多滴雨的分享

话说多滴雨通俗一点就是想办法让他多画几遍

所以我们需要写一些工具和限制来

这里就创建了一个Rian类

代码如下:

package com.example.helloworld;

import android.graphics.Canvas;
import android.graphics.Paint;

public class Rain {

	private float x = 50;
	private float y = 50;
	private int r = 10;// 半径
	private int alpha = 225;// 透明度

	public int getAlpha() {
		return alpha;
	}

	public Rain(float x, float y) {
		super();
		this.x = x;
		this.y = y;
	}
	
	/**
	 * 相当于自定义画圆
	 * @param canvas 画板
	 * @param paint 画笔
	 */
	public void draw(Canvas canvas, Paint paint) {
		r += 5;//半径加加
		alpha -= 5;//透明度减减
		if (alpha < 0) {//如果透明度小于0就让它为0
			alpha = 0;
		}
		//设置透明度
		paint.setAlpha(alpha);
		//画出雨滴
		canvas.drawCircle(x, y, r, paint);
	}

}

然后还是需要一个继承了View类的自定义类

代码如下:

package com.example.helloworld;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.os.SystemClock;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;

public class MyView3 extends View{

	//设置画笔
	Paint paint=new Paint();
	
	//集合用来保存rain对象
	private List<Rain> rains=new ArrayList<Rain>();
	
	
	public MyView3(Context context) {
		super(context);
		//设置画笔的属性
         paint.setStyle(Style.STROKE);// 空心
         paint.setStrokeWidth(1);
         paint.setAntiAlias(true); 
         paint.setColor(Color.parseColor("#103864"));
         //启动线程
         new MyThead().start();
	}
	
	//触摸事件
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		//当激发手指下按事件时
		if(event.getAction()==MotionEvent.ACTION_DOWN){
			//获得点击的坐标
			float x=event.getX();
			float y=event.getY();
			//给rain对象赋值
			Rain rain=new Rain(x, y);
			//附好值添加到集合中
			rains.add(rain);
		}
		return true;
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		//获得迭代器
		Iterator<Rain> it=rains.iterator();
		Rain rain=null;
		while(it.hasNext()){//判断里面是否有值
			rain=it.next();//取出对象
			if(rain.getAlpha()==0){//如果透明度为0就将其移除
				it.remove();
			}
			//画出集合中里面的对象
			rain.draw(canvas, paint);
		}
		
	}
	
	
	class MyThead extends Thread{
		@Override
		public void run() {
			while(true){
				//安卓系统的休眠时间
				SystemClock.sleep(100);
				//通知主线程进行修改
				MyView3.this.postInvalidate();
			}
		}
	}
	
	
}

然后在MainActivity类里面的应用就和上次分享出来的一滴雨一样

就是改成你自己写的继承了View的工具类就可以了。

好啦这次的分享就到这里了!




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值