布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:tools=“http://schemas.android.com/tools”
android:id="@+id/id_container"
android:layout_width=“match_parent”
android:layout_height=“match_parent”
>
<ImageView
android:id="@+id/id_ball"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/timg" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<Button
android:id="@+id/btn_chui"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="verticalRun"
android:text="垂直" />
<Button
android:id="@+id/pwx"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="抛物线" />
</LinearLayout>
package com.example.demol_06.ui.activity;
import android.animation.ObjectAnimator;
import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.PointF;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.LinearInterpolator;
import android.widget.Button;
import android.widget.ImageView;
import com.example.demol_06.R;
public class ThreeActivity extends AppCompatActivity {
private ImageView id_ball;
private Button pwx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_three);
id_ball = findViewById(R.id.id_ball);
pwx = findViewById(R.id.pwx);
Button btn_chui = findViewById(R.id.btn_chui);
WindowManager wm = (WindowManager) ThreeActivity.this
.getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
final int height = wm.getDefaultDisplay().getHeight();
btn_chui.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ObjectAnimator pingyi = ObjectAnimator.ofFloat(id_ball, "translationY", 0, height);
pingyi.setDuration(3000);
pingyi.start();
}
});
pwx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.setDuration(3000);
valueAnimator.setObjectValues(new PointF(0, 0));
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.setEvaluator(new TypeEvaluator<PointF>() {
// fraction = t / duration
@Override
public PointF evaluate(float fraction, PointF startValue,
PointF endValue) {
/* Log.e(TAG, fraction * 3 + "");*/
// x方向200px/s ,则y方向0.5 * 10 * t
PointF point = new PointF();
point.x = 200 * fraction * 3;
point.y = 0.5f * 200 * (fraction * 3) * (fraction * 3);
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);
}
});
}
});
}
}