首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在canvas android上绘制带有动画的圆形轨迹箭头?

如何在canvas android上绘制带有动画的圆形轨迹箭头?
EN

Stack Overflow用户
提问于 2015-04-07 18:14:16
回答 1查看 2.2K关注 0票数 1

伙计们,我试着实现一个黑色的箭头,它在弧线的头部。箭头使用圆弧设置动画,并具有圆轨迹。我已经使用基于不同值的动画实现了红色弧线。请看附件。如何在红色弧线上实现黑色箭头?因为如果我使用与红色弧线动画相同的方式,黑色箭头将打印出不需要的轨迹。

提前感谢!里昂

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-07 22:48:06

你所需要的就是画布。

下面是一个例子。

这是你的绘图类:

代码语言:javascript
复制
public class CircleView   extends View
{
    public CircleView(Context context) {
        super(context);
        path = new Path();
        paint = new Paint();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        float angle = 270;

        float radius = canvas.getWidth()/3;
        float x = canvas.getWidth()/2;
        float y = canvas.getHeight()/2;
        final RectF oval = new RectF();

        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(25);

        oval.set(x - radius, y - radius, x + radius,y + radius);

        // Draw circle
        paint.setColor(Color.RED);
        canvas.drawArc(oval, 135, angle, false, paint);
        paint.setColor(Color.BLUE);
        canvas.drawArc(oval, angle, 405-angle, false, paint);

        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.BLACK);

        float l = 1.2f;
        float a = angle*(float)Math.PI/180;
        // Draw arrow
        path.moveTo(x+ (float)Math.cos(a) *radius, y + (float)Math.sin(a) * radius);
        path.lineTo(x+ (float)Math.cos(a+0.1) *radius*l, y + (float)Math.sin(a+0.1) * radius*l);
        path.lineTo(x+ (float)Math.cos(a-0.1) *radius*l, y + (float)Math.sin(a-0.1) * radius*l);
        path.lineTo(x+ (float)Math.cos(a) *radius, y + (float)Math.sin(a) * radius);
        canvas.drawPath(path, paint);
    }
    private Path path;
    private Paint paint;
}

这是它的活动:

代码语言:javascript
复制
public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new CircleView(this));
    }
}

对于angle == 200,您将看到如下图像:

IntelliJ Idea的工作副本:https://github.com/weerf/android_circle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29489123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档