Android 如何以编程方式应用翻译&;在视图上同时缩放动画

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;

如何在视图上应用平移动画和缩放动画。我必须在同时缩小视图的情况下将视图移动到另一个视图位置

如何将视图从其位置缩放到另一个视图位置(第二个视图不是固定的)

startView-转换的视图

finishView-动画完成的位置

**代码**

  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);
}