1.描述:
简单的实现一个小动画,两个控件重叠。
2.思路:
获取两个控件之间的位置在X,Y轴方向的差值。
/**
* 计算两个控件之间的距离
* @param fromView
* @param toView
*/
public void getLocation(TextView fromView,TextView toView){
int [] toLocation = new int [2];
int [] fromLocation = new int [2];
fromView.getLocationInWindow(fromLocation);
toView.getLocationInWindow(toLocation);
transX = toLocation[0] - fromLocation[0];
transY = toLocation[1] - fromLocation[1];
}
3.移动一个控件到另一个控件上。
ValueAnimator animationX = ObjectAnimator.ofFloat(textView_animation, "translationX", 0f, transX)
.setDuration(1000);
ValueAnimator animationY = ObjectAnimator.ofFloat(textView_animation, "translationY", 0f, transY)
.setDuration(1000);
AnimatorSet bouncer = new AnimatorSet();
bouncer.play(animationX).with(animationY);
bouncer.start();
textViewBottom.setAlpha(0.2f);
1)xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView_animation"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/btn_radio_selected"/>
<TextView
android:id="@+id/textViewBottom"
android:layout_marginLeft="200dp"
android:layout_marginTop="400dp"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/btn_radio_normal"/>
</LinearLayout>
2)代码
public class AnimationTest extends Activity implements OnClickListener {
private final static String TAG = AnimationTest.class.getSimpleName();
private TextView textView_animation,textViewBottom;
float transX = 100f;
float transY = 100f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.test_animation);
textView_animation = (TextView) findViewById(R.id.textView_animation);
textViewBottom = (TextView) findViewById(R.id.textViewBottom);
textView_animation.setOnClickListener(this);
}
@Override
public void onClick(View view) {
int id = view.getId();
if(id == R.id.textView_animation){
getLocation(textView_animation ,textViewBottom);
ValueAnimator animationX = ObjectAnimator.ofFloat(textView_animation, "translationX", 0f, transX)
.setDuration(1000);
ValueAnimator animationY = ObjectAnimator.ofFloat(textView_animation, "translationY", 0f, transY)
.setDuration(1000);
AnimatorSet bouncer = new AnimatorSet();
bouncer.play(animationX).with(animationY);
bouncer.start();
textViewBottom.setAlpha(0.2f);
}
}
/**
* 计算两个控件之间的距离,注意不要在onCreate时计算
* @param fromView
* @param toView
*/
public void getLocation(TextView fromView,TextView toView){
int [] toLocation = new int [2];
int [] fromLocation = new int [2];
fromView.getLocationInWindow(fromLocation);
toView.getLocationInWindow(toLocation);
transX = toLocation[0] - fromLocation[0];
transY = toLocation[1] - fromLocation[1];
}
}