现在的位置: 首页 > 综合 > 正文

view写雷达效果

2018年05月16日 ⁄ 综合 ⁄ 共 1509字 ⁄ 字号 评论关闭

1、遇到不平滑的问题,是因为你每次刷新的时间,半径变化太大,人眼已能识别出这种变化,但是多久刷新一次,是根据手机不同来确定的,当手机每秒刷新25帧以上的时间(即:每秒25次以上),所以,你先得到绘制一帧的时间,然后与它比1000/25(即,我们设定的标准绘制每帧要多少秒)如果绘制完一次后,它小于某个时间则让其等待到我们设定的1000/25ms的时间再去绘制,即要保证绘制一次最短也要1000/25 ms,如果太快就在性能好的手机上太快了,如果绘制一次超过了这个时间,那么绘制完之后就立即绘制。

try{
				if(end - start < 1000/MAX_FPS){
					Thread.sleep(1000/MAX_FPS - (end - start));
				}
			} catch (InterruptedException e){
				e.printStackTrace();
			}

2、通过接口回调数据,你在自定义View中把一些值动态传输出去。

首先,先定义一个View.

interface Listener{
		public void afterDraw(long delay);
	}

其次,在成员定义它,然后在构造函数里面赋值。

	private int width;
	private int height; 
	private Listener listener;
	
	private LinkedList<MyCircle> myCircles = null;
	
	public GameView(Context context,Listener listener) {
		super(context);
		myCircles = new LinkedList<MyCircle>();
		MyCircle myCircle = new MyCircle();
		myCircles.add(myCircle);
		this.listener = listener;
	}

最后,在调用的时间

mGameView = new GameView(this,new GameView.Listener() {
			@Override
			public void afterDraw(long delay) {
				System.out.println("测试数据  "+delay);
			}
		});

3、雷达的逻辑是什么?


就是一些有序列的circle,

每次都把这些个圆给画出来,画出来之后把每个圆的半径增加,透明度降低,这个算是做了一次。

private void myDraw(Canvas canvas) {
		for (MyCircle circle : myCircles) {
			canvas.drawCircle(width / 2, height / 2, circle.getRadius(),
					circle.getPaint());
		}
	}

	private void logic() {
		boolean flag = false;
		for (MyCircle circle : myCircles) {
			circle.addRadius(2);
			flag = circle.desAlpha(1);
		}
		// 如果最外层的半径已经到达某个值,就再创建新的。、
		if (myCircles.get(myCircles.size() - 1).getRadius() > width / 5) {
			MyCircle myCircle = new MyCircle();
			myCircles.add(myCircle);
		}
		// 如果透明度为0就结束它
		if (!flag) {
			myCircles.remove(0);
		}
	}


4、项目中用new Thread()这样的东西,它根本不会自动结束,所以在项目中要尽量少用这些个东西。


直接看代码吧


http://download.csdn.net/detail/dacainiao007/6881087

抱歉!评论已关闭.