android 仿照支付宝蚂蚁森林

本文在大神的基础上添加了修改了一些功能


先说下思路

1.如何让小球不重叠分布?

2.小球上下移动这个可以具体看原文作者分析

本文主要分析第一点

刚开始想法是,每次随机生成一个x,y位置,但是这保证不了小球重叠的问题。

然后受到原文作者启发,其实我们可以固定前面6个小球的位置,让它们处于屏幕中心,然后剩余的4个小球再随机的从我们定义好的位置中获取。

这样就能保证10个小球既不会重叠,也不会偏离屏幕中心太远。

private List<Float>			xCanChooseList			= Arrays.asList(
			0.35f, 0.55f, 0.32f, 0.52f, 0.72f, 0.78f, 0.15f, 0.63f, 0.20f,
			0.30f, 0.47f, 0.21f, 0.76f, 0.65f, 0.38f);

private List<Float>			yCanChooseList			= Arrays.asList(
			0.36f, 0.45f, 0.50f, 0.28f, 0.33f, 0.50f, 0.40f, 0.63f, 0.62f,
			0.75f, 0.57f, 0.20f, 0.70f, 0.17f, 0.21f);

这些是固定好的位置,不会重叠,前面6个都处于屏幕中心,剩下的则处于屏幕上下方,这样能保证用户每次进来不会都一样。

private void setViewLocation(View view, int i) {
		int randomInt = 0;
		if (i >= 6) {
			randomInt = mRandom.nextInt(xCurrentList.size());
		}

		float x = xCurrentList.get(randomInt) * width;
		view.setX(x);

		float y = yCurrentList.get(randomInt) * height;
		view.setY(y);

		LogUtils.e("randomInt=" + randomInt + "设置的x位置是" + xCurrentList.get(randomInt) + "y轴位置是" + yCurrentList.get(randomInt));

		view.setTag(R.string.string_origin_location, (float) y);
		view.setTag(R.string.string_origin_direction, mRandom.nextBoolean());
		view.setTag(R.string.string_origin_spe, randomSpeed.get(mRandom.nextInt(randomSpeed.size())));

		xCurrentList.remove(randomInt);
		yCurrentList.remove(randomInt);
	}

设置小球的位置,设置完之后,需要立马删除。

public interface OnStopAnimateListener {

		void onBallDisappearAnimListener(String number);

		void onExitAnimateListener();
	}

添加了两个动画执行完成的方法,第一个是某一个小球执行完动画的回调,第二个是用户退出整个Activity进行的回调。

剩下具体思路可以看代码。

代码链接


猜你喜欢

转载自blog.csdn.net/u010648159/article/details/80297953