【问题标题】:Translate and Scale animation in parallel并行平移和缩放动画
【发布时间】:2013-12-17 16:29:55
【问题描述】:

我想将一些视图从任何位置移动到屏幕的中心并平行缩放。如果这太复杂,translatescale 顺序也是可以接受的。但我都达不到。我认为这是枢轴点的问题。但很抱歉我没有找到解决方案。请帮忙。也许对那些开发游戏的人来说这很容易,而我对此没有采取任何行动。

下面是我的代码:

private void moveViewToScreenCenter( final View view ){
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics( dm );
    int statusBarOffset = dm.heightPixels - rootLayout.getMeasuredHeight();

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

    int xDelta = (dm.widthPixels - view.getMeasuredWidth())/2 - originalPos[0];
    int yDelta = (dm.heightPixels - view.getMeasuredHeight())/2 + statusBarOffset - originalPos[1];

    AnimationSet animSet = new AnimationSet(true);
    animSet.setFillAfter(true);
    animSet.setDuration(1000);
    animSet.setInterpolator(new BounceInterpolator());
    TranslateAnimation translate = new TranslateAnimation( 0, xDelta , 0, yDelta);
    animSet.addAnimation(translate);
    ScaleAnimation scale = new ScaleAnimation(1f, 2f, 1f, 2f, ScaleAnimation.RELATIVE_TO_PARENT, .5f, ScaleAnimation.RELATIVE_TO_PARENT, .5f);
    animSet.addAnimation(scale);
    view.startAnimation(animSet);
}

更新: 上面的代码可以处理左上区域的图像视图,右下区域的图像视图斜穿过屏幕并消失。

【问题讨论】:

    标签: android parallel-processing scale translate-animation


    【解决方案1】:

    经过无数次无望的考验,我成功了,这太惊人了。

    下面是代码,它可用于将布局中的任何视图移动到该布局的中心:

    private void moveViewToScreenCenter( final View view ){
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics( dm );
    
        int originalPos[] = new int[2];
        view.getLocationOnScreen( originalPos );
    
        int xDelta = (dm.widthPixels - view.getMeasuredWidth() - originalPos[0])/2;
        int yDelta = (dm.heightPixels - view.getMeasuredHeight() - originalPos[1])/2;
    
        AnimationSet animSet = new AnimationSet(true);
        animSet.setFillAfter(true);
        animSet.setDuration(1000);
        animSet.setInterpolator(new BounceInterpolator());
        TranslateAnimation translate = new TranslateAnimation( 0, xDelta , 0, yDelta);
        animSet.addAnimation(translate);
        ScaleAnimation scale = new ScaleAnimation(1f, 2f, 1f, 2f, ScaleAnimation.RELATIVE_TO_PARENT, .5f, ScaleAnimation.RELATIVE_TO_PARENT, .5f);
        animSet.addAnimation(scale);
        view.startAnimation(animSet);
    }
    

    【讨论】:

    • 你的 animSet.setFillAfter(true); 拯救了我的一天 :)
    【解决方案2】:

    核心思想是:

    AnimationSet animationSet = new AnimationSet(true);
    
    animationSet.addAnimation(
      new TranslateAnimation(0f, 64f, 0f, 32f),
      new ScaleAnimation(1f, 0f, 1f, 0f, ScaleAnimation.RELATIVE_TO_PARENT, 0f, ScaleAnimation.RELATIVE_TO_PARENT, 0f););
    
    myView.startAnimation(
      animationSet);
    

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 1970-01-01
      • 2015-03-30
      • 2011-03-31
      • 2012-07-08
      • 2018-05-13
      • 2011-07-04
      • 2017-05-30
      • 2019-12-03
      相关资源
      最近更新 更多