活动缩放从按钮转换 - Android

时间:2014-02-24 14:03:03

标签: android android-activity android-animation

我正在尝试在我的应用中实现活动转换。我遇到了一个很棒的here。但它只与android jellybean +兼容。上面的链接重定向到youtube,其中Nick Butcher在视图中显示活动缩放过渡。

我想在姜饼(API 10)+上使用它。我怎样才能做到这一点?我想到的一个想法是在屏幕上显示该视图的位置,将其传递给即将到来的活动,然后要求即将进行的活动从该位置缩放或变大。我不知道这是否可能。非常感谢任何想法或解决方案。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用此动画,并根据您的图像位置和屏幕尺寸更改XY,并在动画结束时开始您的活动,这是一个技巧,希望它有所帮助:

private void centerAndZoomView( View view)
    {
        RelativeLayout root = (RelativeLayout) findViewById( R.id.rootLayout );
        DisplayMetrics dm = new DisplayMetrics();
        this.getWindowManager().getDefaultDisplay().getMetrics( dm );
        int statusBarOffset = dm.heightPixels - root.getMeasuredHeight();

        int originalPos[] = new int[2];
        view.getLocationOnScreen( originalPos );

        int xDest = dm.widthPixels/2;
        xDest -= (view.getMeasuredWidth()/2);
        int yDest = dm.heightPixels/2 - (view.getMeasuredHeight()/2) - statusBarOffset;

        TranslateAnimation anim = new TranslateAnimation( 0, xDest - originalPos[0] , 0, yDest - originalPos[1] );

        Animation scale
          = new ScaleAnimation(1.0f,root.getMeasuredWidth()/view.getMeasuredWidth() , 1.0f, root.getMeasuredHeight()/view.getMeasuredHeight(),
                               Animation.RELATIVE_TO_SELF, 0.5f,
                               Animation.RELATIVE_TO_SELF, 0.5f);
        scale.setInterpolator(new AccelerateInterpolator());

        AnimationSet set = new AnimationSet(false);

        set.addAnimation(scale);
        set.addAnimation(anim);

        set.setFillAfter(true);
        set.setDuration(10000);
        //set.start();


        view.startAnimation(set);
        set.setAnimationListener(new AnimationListener()
        {
            @Override
            public void onAnimationStart(Animation animation){}

            @Override
            public void onAnimationRepeat(Animation animation){}

            @Override
            public void onAnimationEnd(Animation animation)
            {
                Intent intent = new Intent(getApplication(), NextActivity.class);
                 startActivity(intent);

             Toast.makeText(getApplicationContext(), "END OF ANIMATION", Toast.LENGTH_LONG).show();
            }
        });

    }

我根据屏幕宽度和高度组合了TranslateAnimation和ScaleAnimation,你可以传递任何View(Button,ImageView,LinarLayout ......)作为参数,你的根布局必须有&# 34; rootLayout"标识。

答案 1 :(得分:0)

您可以使用Activity.overridePendingTransition()方法并指定自己的动画。这已经从API级别5开始提供了。ActivityOptions Nick在视频中使用的只是一种更新的方式来完成相同的事情,并在API级别16中引入。请注意,为了支持较旧的API,您需要我必须使用Animation资源(补间动画)而不是Animator类型。您可以进行翻译,缩放和缩放(缩放)类型动画。