回弹算法

来源:互联网 发布:cc域名多少钱一年 编辑:程序博客网 时间:2024/05/01 08:41

用于android按键的漂浮回弹动画,采用模拟方式实现

1.回弹幅度固定,动画总时间浮动,输入最终位置坐标,返回每毫秒的位置坐标

import java.util.*;public class bounce {public static ArrayList<Double> getStatus(int y) {double a = -0.01;double v = 0;ArrayList<Double> pos = new ArrayList<Double>();pos.add((double) y);for (int i = 0; i < 100; ++i) {pos.add(pos.get(pos.size() - 1) + v);v = v - a;}for (int i = 0; i < 100; ++i) {pos.add(pos.get(pos.size() - 1) + v);v = v + a;}while (pos.get(pos.size() - 1) + v > 0) {pos.add(pos.get(pos.size() - 1) + v);v = v + a;}Collections.reverse(pos);return pos;}public static void main(String[] args) {int y = 1000;ArrayList<Double> pos;pos = getStatus(y);for (int i = 0; i < pos.size(); ++i) {System.out.println(pos.get(i));}}}



2.回弹幅度比例固定,动画总时间固定,输入最终位置坐标,返回每毫秒的位置坐标

import java.util.*;public class bounce1 {public static ArrayList<Double> getStatus(int y) {double a = -0.01;double v = 3;ArrayList<Double> pos = new ArrayList<Double>();pos.add(0.0);for (int i = 0; i < 400; ++i) {pos.add(pos.get(pos.size() - 1) + v);v = v + a;}for (int i = 0; i < 100; ++i) {pos.add(pos.get(pos.size() - 1) + v);v = v - a;}double base = pos.get(pos.size() - 1);for (int i = 0; i < pos.size(); ++i) {pos.set(i, pos.get(i) / base * y);}return pos;}public static void main(String[] args) {int y = 500;ArrayList<Double> pos;pos = getStatus(y);for (int i = 0; i < pos.size(); ++i) {System.out.println(pos.get(i));}}}


1.回弹幅度固定,动画时间浮动
0 0
原创粉丝点击