gpt4 book ai didi

java - ArcShape 的 Android 自定义动画

转载 作者:搜寻专家 更新时间:2023-10-30 21:23:39 25 4
gpt4 key购买 nike

首先让我解释一下我的目标。我正在尝试制作一个 Animation 来更改 ArcShape 的属性。 ArcShape 的 构造函数有两个字段:startAnglesweepAngle。我想为 sweepAngle 设置动画,使其在屏幕上显示为一个不断缩小的圆圈。

您可以通过想象吃 bean 人来想象这个动画。想象他的嘴是闭着的。这个动画类似于他越来越张开他的上颚,直到吃 bean 人消失为止。

现在...我在实现这个方面遇到了几个问题。首先,一旦创建了 ArcShape,就没有改变它的 sweepAngle 的内置方法。这让我想到了我的第一个问题:是否有任何方法可以覆盖 ArcShape 并实现一些 setSweepAngle 方法?或者我是否必须为我希望显示的每个 sweepAngle 创建一个 new ArcShape

现在讨论第二个问题...假设我找到了第一个问题的解决方案,我该如何创建这个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 我在这个 Pacman 类中嵌套了我的自定义 Animation .这允许我访问 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

关于java - ArcShape 的 Android 自定义动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4566118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com