gpt4 book ai didi

android - 如何在android中动画绘制圆弧

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:45 35 4
gpt4 key购买 nike

我是 Android 的新手,我正在使用 drawArc 函数向用户显示某些任务的进度,但现在我想为其设置动画,使其看起来好像在增长。

我使用了下面的代码但没有工作:

   new Thread(new Runnable() {
int i=0;
float startAngle =0;
float swipeAngle = 40.7f;
public void run() {
while (i < swipeAngle) {
canvas.drawArc(rectF, startAngle, i, false, paint);

try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
i++;
}
}).start();

有人可以建议这里有什么问题或者可以建议一些其他的想法来制作动画。

最佳答案

  1. 最好创建一个自定义 View 类,比如“ArcView”,它将扩展 View 类。然后在 onDraw 方法中添加绘制代码。
    1. 对于动画,您可以编写单独的类来扩展动画类
    2. 将您的自定义 View 传递给 Animation 类,并在 applyTransformation() 方法下计算角度,然后将其设置为您的自定义 View 并使 View 无效。

您已经完成了带有精美动画的 Arc。

查看类

public class ArcView extends View {

private final Paint mPaint;
private final RectF mRect;
private float arcAngle;

public ArcView(Context context, AttributeSet attrs) {

super(context, attrs);

// Set Angle to 0 initially
arcAngle = 0;

mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(20);
mPaint.setColor(Color.RED);
mRect = new RectF(20, 20, 220, 220);

}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawArc(mRect, 90, arcAngle, false, mPaint);
}

public float getArcAngle() {
return arcAngle;
}

public void setArcAngle(float arcAngle) {
this.arcAngle = arcAngle;
}
}

动画类

public class ArcAngleAnimation extends Animation {

private ArcView arcView;

private float oldAngle;
private float newAngle;

public ArcAngleAnimation(ArcView arcView, int newAngle) {
this.oldAngle = arcView.getArcAngle();
this.newAngle = newAngle;
this.arcView = arcView;
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation transformation) {
float angle = 0 + ((newAngle - oldAngle) * interpolatedTime);

arcView.setArcAngle(angle);
arcView.requestLayout();
}
}

在 Activity 中,您可以使用以下代码来实例化弧形 View 。

 ArcView arcView = (ArcView) findViewById(R.id.arcView);
ArcAngleAnimation animation = new ArcAngleAnimation(arcView, 360);
animation.setDuration(1000);
arcView.startAnimation(animation);

内部布局,

    <com.graph.app.Test.ArcView
android:id="@+id/arcView"
android:layout_width="match_parent"
android:layout_height="match_parent" />

关于android - 如何在android中动画绘制圆弧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37709218/

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