代码之家  ›  专栏  ›  技术社区  ›  VirtualProdigy

使用surfaceview和画布缩放动画

  •  0
  • VirtualProdigy  · 技术社区  · 10 年前

    我正在尝试构建我的第一个游戏,但我在确定实现缩放动画的正确方法时遇到了问题。我想在画布上画一门大炮,在它开火之前,我想让它慢慢放大到原来大小的三倍左右。(先是原始尺寸,然后是1.5倍,然后是2.5倍,3个原始尺寸)

    我应该使用画布使用bitmap.scalebitmap方法或sprite表或其他方法绘制新的大炮位图吗?(2D图形)

    还有人知道关于这个主题的任何教程吗?

    非常感谢。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Alireza Ahmadi    10 年前

    属性动画也是一个很好的缩放选项,而且非常简单!这是我的代码,用于将布局缩小到0,然后恢复正常。你可以通过简单的修改得到你想要的。

        private void anim() {
        AnimatorSet set = new AnimatorSet();
    
        ValueAnimator fadeOld = ValueAnimator.ofFloat(1,(float)0);
        fadeOld.setDuration(100);
        fadeOld.setInterpolator(new AccelerateInterpolator());
        fadeOld.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                Float newValue = (Float) valueAnimator.getAnimatedValue();
                cardContainer.setScaleX(newValue);
                cardContainer.setScaleY(newValue);
                cardContainer.setAlpha(newValue);
    
    
            }
        });
    
        ValueAnimator showNew = ValueAnimator.ofFloat(0, 1);
        showNew.setDuration(150);
        showNew.setInterpolator(new DecelerateInterpolator());
        showNew.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                Float newValue = (Float) valueAnimator.getAnimatedValue();
                cardContainer.setScaleX(newValue);
                cardContainer.setScaleY(newValue);
                cardContainer.setAlpha(newValue);
            }
        });
    
    
        set.play(fadeOld);
        set.play(showNew).after(fadeOld);
        set.start();
    
    }