<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.manoel.animator.MainActivity$PlaceholderFragment" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn" />
</RelativeLayout>
package com.manoel.animator;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.MarginLayoutParams;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.Button;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.Animator.AnimatorListener;
import com.nineoldandroids.animation.AnimatorInflater;
import com.nineoldandroids.animation.AnimatorSet;
import com.nineoldandroids.animation.IntEvaluator;
import com.nineoldandroids.animation.ObjectAnimator;
import com.nineoldandroids.animation.ValueAnimator;
import com.nineoldandroids.animation.ValueAnimator.AnimatorUpdateListener;
public class MainActivity extends ActionBarActivity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
public class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
init(rootView);
return rootView;
}
private void init(View root) {
Button mButton = (Button) root.findViewById(R.id.btn);
// mButton.animate().setDuration(2000).scaleX(2).scaleY(2);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
performOnClick3(v);
}
});
}
}
public class ViewWrapper {
private View view;
public ViewWrapper(View view) {
this.view = view;
}
public void setMarginLeft(int marginLeft) {
MarginLayoutParams marginLayoutParams = (MarginLayoutParams) view
.getLayoutParams();
marginLayoutParams.leftMargin = marginLeft;
view.setLayoutParams(marginLayoutParams);
}
public int getMarginLeft() {
MarginLayoutParams marginLayoutParams = (MarginLayoutParams) view
.getLayoutParams();
return marginLayoutParams.leftMargin;
}
}
// 从xml里面加载
private static AnimatorSet set;
public void performOnClick3(View view) {
if (set == null) {
ViewWrapper warpper = new ViewWrapper(view);
set = (AnimatorSet) AnimatorInflater.loadAnimator(getBaseContext(),
R.animator.my_animator);
set.setTarget(warpper);
}
if (!set.isStarted()) {
set.start();
} else {
set.cancel();
}
}
private static ObjectAnimator objectAnimator;
public void performOnClick2(View view) {
ViewWrapper warpper = new ViewWrapper(view);
if (objectAnimator == null) {
objectAnimator = objectAnimator
.ofInt(warpper, "marginLeft", 0, 300);
objectAnimator
.setInterpolator(new AccelerateDecelerateInterpolator());
objectAnimator.setDuration(2000);
objectAnimator.setRepeatCount(ValueAnimator.INFINITE);
objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
}
if (!objectAnimator.isStarted()) {
objectAnimator.start();
} else {
objectAnimator.cancel();
}
}
private static ValueAnimator valueAnimator;
public static void performOnClick(final View view) {
if (valueAnimator == null) {
valueAnimator = ValueAnimator.ofObject(new IntEvaluator(), 0, 400);
valueAnimator = ValueAnimator.ofInt(0, 300);
valueAnimator
.setInterpolator(new AccelerateDecelerateInterpolator());
valueAnimator.setDuration(2000);
valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
valueAnimator.setRepeatMode(ValueAnimator.REVERSE);
valueAnimator.setTarget(view);
valueAnimator.addListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
Log.d(TAG, "onAnimationStart");
}
@Override
public void onAnimationRepeat(Animator animation) {
Log.d(TAG, "onAnimationRepeat");
}
@Override
public void onAnimationEnd(Animator animation) {
Log.d(TAG, "onAnimationEnd");
}
@Override
public void onAnimationCancel(Animator animation) {
Log.d(TAG, "onAnimationCancel");
}
});
valueAnimator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Integer animatedValue = (Integer) animation
.getAnimatedValue();
MarginLayoutParams marginLayoutParams = (MarginLayoutParams) view
.getLayoutParams();
marginLayoutParams.leftMargin = animatedValue;
view.setLayoutParams(marginLayoutParams);
}
});
}
if (valueAnimator.isStarted()) {
valueAnimator.cancel();
} else {
valueAnimator.start();
}
}
}