当前位置: 首页 > 面试题库 >

适用于ArcShape的Android自定义动画

许沛
2023-03-14
问题内容

首先让我解释一下我的目标。我试图使Animation改变的属性ArcShape。一个ArcShape's构造函数有两个领域:startAnglesweepAngle。我想设置动画sweepAngle,使其在屏幕上显示为不断缩小的圆圈。

您可以通过想象PacMan来描绘此动画。想象一下他的嘴巴是闭合的。这种动画效果类似于他越来越张开上颚,直到不再有吃豆人为止。

现在…我在实现此问题上有两个问题。首先,ArcShape创建后,就没有内置的更改方法sweepAngle。这使我想到了第一个问题:是否有任何方法可以覆盖ArcShape和实现某些setSweepAngle方法?还是我必须new ArcShape为每个sweepAngle要显示的内容创建一个?

现在转到第二个问题…假设我找到了第一个问题的解决方案,那么我该如何创建它Animation呢?这是我现在拥有的要点:

public class OpenPacman extends Animation {
  public OpenPacman(float startAngle, float sweepAngle) {
    mStartAngle = startAngle;
    mSweepAngle = sweepAngle;
  }

  @Override
  protected void applyTransformation(float interpolatedTime, Transformation t) {
    /* This represents the current sweepAngle */
    float currAngle = mStartAngle + ((mSweepAngle - mStartAngle) * interpolatedTime);

    //Now I need to update the ArcShape's sweepAngle to currAngle. But HOW?
  }
}

问题答案:

我找到了解决方案。我有一个扩展的类,View我们称其为Pacman我的自定义嵌套AnimationPacman该类中。这让我访问member variables了的Pacman类。

public class Pacman extends View {
  float mSweepAngle;
  ...
  //include constructors
  //override onMeasure
  ...

  /* Here we override onDraw */
  @Override
  protected void onDraw(final Canvas canvas) {
    Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
    RectF oval = new RectF(canvas.getClipBounds());
    canvas.drawArc(oval, 0, mCurrAngle, true, p);
  }

  /* Here we define our nested custom animation */
  public class OpenPacman extends Animation {
    float mStartAngle;
    float mSweepAngle;

    public OpenPacman (int startAngle, int sweepAngle, long duration) {
      mStartAngle = startAngle;
      mSweepAngle = sweepAngle;
      setDuration(duration);
      setInterpolator(new LinearInterpolator());
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
      float currAngle = mStartAngle + ((mSweepAngle - mStartAngle) * interpolatedTime);
      Pacman.this.mCurrAngle = -currAngle; //negative for counterclockwise animation.
    }
  }
}

现在,当自定义动画更新容器类时mCurrAngle,会onDraw被自动调用,从而绘制相应的ArcShape



 类似资料:
  • 问题内容: 我有一个ListView,其行中应具有以下布局: 应该是静态的,但每隔几秒钟就会更改一次。 我通过填充,将其传递给并在每次数据更改时进行设置来实现它: 我的问题是我不知道如何以上述格式显示数据。 提前致谢。 问题答案: 将此添加到你的布局文件夹 使你的主要xml布局如下 这是你的适配器 你的Java活动

  • 很多时候,我们需要将TextView的字体自动调整到给定的边界。 可悲的是,即使有很多线程和帖子(以及建议的解决方案)在谈论这个问题(这里,这里和这里的例子),但没有一个实际工作得很好。 这就是为什么,我决定测试他们每一个直到我找到真正的交易。 我认为这样一个textView的要求应该是: > 应允许使用任何字体、字体、样式和字符集。 应同时处理宽度和高度 没有截断,除非文本不能适合,因为限制,我

  • 我想通过一个自定义的泛型unapply函数压缩我的计算器,该函数计算参数并在成功时返回值。 但是这失败了,错误 有什么方法可以实现这一点吗?我已经研究了类型标签,不适用方法的隐式转换,但我不知道如何将它们集成到这个问题中。如何正确定义Eval?

  • 问题内容: 如果我为桌面启动它,它运行得很好,但是为我的Android导出后,它在我启动该应用程序后立即崩溃。 所以我的问题…: 它适用于台式机而不适用于我的Android有什么问题? 。 Logcat 我是Java的新手,所以我希望它是正确的部分:x 问题答案: 有一些人例外,logcat说: 这是由于您的模拟器未将gpu用于图形处理,最好的解决方案是使用手机来测试您的应用程序 由于某些原因(可

  • 我正在Android Studio做一个项目。突然,自动导入在android studio中对android类停止工作,比如android.Widgets.TextView等。在我的设置中,自动导入是启用的。如果我编写import android.widget.TextView,那么TextView将显示在auto import框中。

  • 我有一些自定义角色,例如: 当使用'ROLE_USER'时,“spans”中的文本可以正常显示,但当使用其他角色时,文本无法显示。然后我在自定义角色中添加'ROLE_'前缀,它又变得正常了。 我尝试删除“ROLE\uu0”前缀约束,如下所示: 它也不起作用。知道如何删除强制的“ROLE\uuux”前缀吗?