Android 如何以编程方式应用翻译&;在视图上同时缩放动画
如何在视图上应用平移动画和缩放动画。我必须在同时缩小视图的情况下将视图移动到另一个视图位置 如何将视图从其位置缩放到另一个视图位置(第二个视图不是固定的) startView-转换的视图 finishView-动画完成的位置 **代码**Android 如何以编程方式应用翻译&;在视图上同时缩放动画,android,animation,translate-animation,Android,Animation,Translate Animation,如何在视图上应用平移动画和缩放动画。我必须在同时缩小视图的情况下将视图移动到另一个视图位置 如何将视图从其位置缩放到另一个视图位置(第二个视图不是固定的) startView-转换的视图 finishView-动画完成的位置 **代码** private void startAnimation(View startView, View finishView) { int startX = startView.getLeft() + startView.getWidth() / 2;
private void startAnimation(View startView, View finishView) {
int startX = startView.getLeft() + startView.getWidth() / 2;
int startY = startView.getTop() + startView.getHeight() / 2;
int startViewLocation[]=new int[2];
startView.getLocationInWindow(startViewLocation);
int finishViewLocation[]=new int[2];
finishView.getLocationInWindow(finishViewLocation);
int endX = finishViewLocation[0];
int endY=finishViewLocation[1];
System.out.println("statX " + startX + " " + (startView.getLeft() + startView.getWidth() / 2));
System.out.println("statY " + startY+" "+(startView.getTop() + startView.getHeight() / 2));
System.out.println("endX " + endX+" "+finishViewLocation[0]);
System.out.println("endY " + endY+" "+finishViewLocation[1]);
TranslateAnimation translateAnimation = new TranslateAnimation(0, 0,
TranslateAnimation.ABSOLUTE, endX, 0, 0,
TranslateAnimation.ABSOLUTE, endY);
ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 0.0f, 1.0f,
0.0f);
AnimationSet set = new AnimationSet(true);
set.addAnimation(translateAnimation);
set.addAnimation(scaleAnimation);
set.setFillAfter(true);
set.setDuration(2000);
set.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
}
});
startView.startAnimation(set);
}
仅缩放动画就足以获得这种感觉,同时从一个点扩展到另一个点也会产生平移效果。 试试这个代码
ScaleAnimation animation = new ScaleAnimation(1, 1, 0, 1, 1,
Animation.RELATIVE_TO_SELF, Animation.RELATIVE_TO_SELF, 0f);
animation.scaleCurrentDuration(6000);
animation.setDuration(300);
animation.setStartOffset(50);
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
});
view.startAnimation(animation);
此代码从上到下缩放视图。缩放动画定义在哪里?@madhu抱歉,我错误地删除了这一行。我已经编辑了这篇文章。谢谢你的回答。但我不需要从上到下翻译。此代码的行为类似于放大动画,而不是缩放。谢谢。正如你所建议的那样,单靠缩放动画就足够了。。非常感谢。@mukesh你能帮我做一下这个动画的反面吗。。我刚刚交换了视图(即startview和finishview),但它仍然从finishview启动动画。
private void scaleAnimation(final View startView, View finishView,final TextView cartItems) {
int startViewLocation[] = new int[2];
startView.getLocationInWindow(startViewLocation);
int finishViewLocation[] = new int[2];
finishView.getLocationInWindow(finishViewLocation);
int startX = startViewLocation[0] + startView.getWidth() / 2;
int startY = startViewLocation[1] + startView.getHeight() / 2;
int endX = finishViewLocation[0] + finishView.getWidth() / 2;
int endY = finishViewLocation[1] + finishView.getHeight() / 2;
ScaleAnimation animation = new ScaleAnimation(1f, 0f, 1, 0f,
Animation.ABSOLUTE, endX - startX + startView.getWidth() / 2,
Animation.ABSOLUTE, endY - startY + startView.getHeight() / 2);
// animation.scaleCurrentDuration(6000);
animation.setDuration(2000);
// animation.setStartOffset(50);
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
startView.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
startView.setVisibility(View.GONE);
cartItems.setText(String.valueOf(totlaCartsItems));
}
});
startView.startAnimation(animation);
}