public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//获取屏幕的高度
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
//现实指标
heightPixels = displayMetrics.heightPixels;
id_ball.setOnClickListener(new View.OnClickListener() {
@Override
}
});
}
// 抛物线
public void paowuxian(View view) {
//获取动画执行类,
ValueAnimator valueAnimator = new ValueAnimator();
//设置动画执行时间
valueAnimator.setDuration(3000);
//设置起始点
valueAnimator.setObjectValues(new PointF(0, 0));
//设置类型估值
valueAnimator.setEvaluator(new TypeEvaluator<PointF>() {
@Override
public PointF evaluate(float v, PointF pointF, PointF t1) {
PointF point = new PointF();
point.x = 200 * v * 2;
point.y = 0.5f * 200 * (v * 3) * (v * 2);
return point;
}
});
valueAnimator.start();
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
{
@Override
public void onAnimationUpdate(ValueAnimator animation)
{
PointF point = (PointF) animation.getAnimatedValue();
id_ball.setX(point.x);
id_ball.setY(point.y);
}
});
}
//垂直落下
public void verticalRun(View view){
//垂直//参数一:X起始位置,,参数二Y起始位置
ValueAnimator animator = ValueAnimator.ofFloat(0, heightPixels - id_ball.getHeight());
animator.setTarget(id_ball);
animator.setDuration(3000).start();
// animator.setInterpolator(value)
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
{
@Override
public void onAnimationUpdate(ValueAnimator animation)
{
id_ball.setTranslationY((Float) animation.getAnimatedValue());
}
});
}
}
private ImageView id_ball;
private int heightPixels;
//valueanimator实现的动画
//不需要设置操作的属性,这就是和objectanimator的区别
//好处,不需要操作对象的属性,一定要有getter和settter方法,可以根据当前动画的计算值,来操作任何属性@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
id_ball = (ImageView) findViewById(R.id.id_ball);//获取屏幕的高度
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
//现实指标
heightPixels = displayMetrics.heightPixels;
id_ball.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
// 抛物线
public void paowuxian(View view) {
//获取动画执行类,
ValueAnimator valueAnimator = new ValueAnimator();
//设置动画执行时间
valueAnimator.setDuration(3000);
//设置起始点
valueAnimator.setObjectValues(new PointF(0, 0));
//设置类型估值
valueAnimator.setEvaluator(new TypeEvaluator<PointF>() {
@Override
public PointF evaluate(float v, PointF pointF, PointF t1) {
PointF point = new PointF();
point.x = 200 * v * 2;
point.y = 0.5f * 200 * (v * 3) * (v * 2);
return point;
}
});
valueAnimator.start();
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
{
@Override
public void onAnimationUpdate(ValueAnimator animation)
{
PointF point = (PointF) animation.getAnimatedValue();
id_ball.setX(point.x);
id_ball.setY(point.y);
}
});
}
//垂直落下
public void verticalRun(View view){
//垂直//参数一:X起始位置,,参数二Y起始位置
ValueAnimator animator = ValueAnimator.ofFloat(0, heightPixels - id_ball.getHeight());
animator.setTarget(id_ball);
animator.setDuration(3000).start();
// animator.setInterpolator(value)
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
{
@Override
public void onAnimationUpdate(ValueAnimator animation)
{
id_ball.setTranslationY((Float) animation.getAnimatedValue());
}
});
}
}