【问题标题】:Activity zoom transition from button - Android按钮的活动缩放过渡 - Android
【发布时间】:2014-02-25 05:03:04
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: android android-activity android-animation


    【解决方案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...) 作为参数,并且您的根布局必须具有“rootLayout” id。

    【讨论】:

    • 看起来不错。但我现在完全可以在 android 中制作动画了。你能告诉我什么时候打电话吗?我想在按钮点击时开始一个新的活动。
    • 我想为你创建它,但我正在工作:),那么你可以从这里开始:cogitolearning.co.uk/?p=1019
    • 谢谢!有时间请帮帮我。
    【解决方案2】:

    您可以使用@987654321@ 方法并指定您自己的动画。这从 API 级别 5 开始可用。视频中使用的ActivityOptions Nick 只是完成相同任务的一种更新方式,并在 API 级别 16 中引入。请注意,为了支持旧 API,您将拥有使用 Animation 资源(补间动画)而不是 Animator 类型。您可以制作平移、alpha 和缩放(缩放)类型的动画。

    【讨论】:

    • 我读到了overridePendingTransition(),但我认为用这种方法做尼克正在做的事情是不可能的。你能告诉我一个解释这个的好网站吗,或者如果你知道,请帮助我!
    • 我没有机会观看整个视频,所以我无法准确评论他在做什么。但是,我已经能够使用这种方法而没有任何问题来制作我自己的自定义动画。他具体做了什么你认为不可能的事情?
    • 他通过放大视图开始新活动的部分
    猜你喜欢
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2018-12-30
    • 1970-01-01
    相关资源
    最近更新 更多