【问题标题】:What would be a better way to create Android animation?创建Android动画的更好方法是什么?
【发布时间】:2013-07-27 10:09:41
【问题描述】:

我正在尝试创建一个 Android 应用程序,其中将包含许多(有时最多约 200 个)小图像,这些图像将一次动画(重新定位和更改大小)约 20 个。之后它们将保持静止。

应该使用View类动画的简单解决方案还是使用Drawable动画?

编辑:我应该更具体..

那里有很多教程和很多不同的方法来做同样的事情。我正在寻找实现下一个场景的最佳方法:

假设我当前在屏幕上绘制了 50 个不同小 (30x30) 图像。 我需要为它们设置动画,以便它们转换为不同的 DYNAMIC 位置。当他们移动时,我需要上下调整图像的大小(所以如果从顶部看,我会得到一种跳跃效果)。 他们需要在特定的时间范围内移动。例如:第一个图像开始移动后,第二个将在最后一个图像后50ms开始移动,依此类推(波浪效果)...... 一组图像翻译完成后,会形成另一组,但最后一组仍会出现在屏幕上。

所以我要问的是有关执行此操作的最佳方法的一些细节。例如:我应该为每个图像创建一个 XML 文件,还是应该将它们加载到代码中?我应该在应用程序启动时加载所有图像(最多可能有 200 个小图像,也许更多)还是可以按需加载它们?最好的动画技术是什么?诸如此类。

【问题讨论】:

    标签: android image animation view drawable


    【解决方案1】:

    我找到的最简单的解决方案:(API 16+)

    Runnable endAction = new Runnable() {
         public void run() {
             tv.animate().x(400).y(1400).scaleX(1).scaleY(1);
         }
     };
    tv.animate().x(600).y(100).scaleX(3).scaleY(3).withEndAction(endAction);
    

    【讨论】:

      【解决方案2】:

      我会使用 Drawable 动画,但这并不重要。如果应用程序运行速度很慢,您应该做的重要事情是使用不同的threads,例如使用以下代码:

      Handler mHandler = new Handler();
              mHandler.post(new Runnable() {
                         public void run() {
                             //YOUR ANIMATION HERE
                          }
                       });            
      

      这样你就可以同时处理多张图片的动画,因为手机会在不同的计算线程中执行代码。

      您也可以像这样使用 AsyncTask(将类添加到您的活动类中):

      private class doAnimation extends AsyncTask<ImageView, Void, Void>{
      
      
           @Override
           protected Void doInBackground(ImageView... image) {
               image.startAnimation(animation);
               return null;
          }
      

      }

      并使用以下方法调用它:

          new doAnimation().execute(image1);
          new doAnimation().execute(image2);
          new doAnimation().execute(image3);
          ...
      

      【讨论】:

      • 您能详细说明一下吗?我不知道它是否会运行缓慢 - 这就是我试图通过询问来避免的。你有过这种动画的经验吗?
      • 这个答案不起作用......发布到 mHandler 的 Runnable 在主/UI 循环上运行,所以它并没有真正的帮助。
      • 好吧,我不知道,但我认为使用 AsyncTask 会起作用,对吧?我刚刚编辑了答案,尝试一下并解释它是否可以解决。
      猜你喜欢
      • 1970-01-01
      • 2021-08-18
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      相关资源
      最近更新 更多