重绘视图 Android

11

我现在拥有一个视图,在onCreate后以编程方式添加(取决于其他一些变量)。一切正常,它绘制了圆形的一部分。

但我的问题是如何在以后重新绘制它?在获取一些数据后,我需要改变圆中的角度。

风向玫瑰的代码:

    public class WindRose extends View {

    public WindRose(Context context) {
        super(context);


    }

    @Override

    protected void onDraw(Canvas canvas) {


        super.onDraw(canvas);
        canvasTest = canvas;


        float height = (float) getHeight();
        float width = (float) getWidth();

        float radius;

        if (width > height) {
            radius = height / 2;

        } else {
            radius = width / 2;
        }

        // radius = (height )/ 2;


        Path path = new Path();
        path.addCircle(width, height, radius, Path.Direction.CCW);

        // / 2

        Resources resources = getResources();
        int color = resources.getColor(R.color.green_back);



        paint.setColor(color);
        paint.setStrokeWidth(5);

        paint.setStyle(Paint.Style.FILL);
        float center_x, center_y;
        center_x = width / 2;
        center_y = height / 2;



        //Formulas :
        //SD = Start Degree
        //ED = End Degree

        //If cakepiece passes 0 (East)
        //SD, 360-(SD+ED)

        //Else :
        //SD, (ED-SD)

        oval.set(center_x - radius, center_y - radius, center_x + radius, center_y + radius);

        if (End > Start) {
            canvas.drawArc(oval, Start, (End - Start), true, paint);

        } else if (End < Start) {
            canvas.drawArc(oval, Start, ((360 - Start) + End), true, paint);
        }


    }


}

如果我更新StartEnd变量,什么都不会发生。我还尝试在类上调用invalidate,但也没有重新绘制。

我尝试过的invalidate

WindRose windrose = new WindRose(this);
windrose.invalidate();

从 WindRose 所在的主类中调用了该方法。

我应该如何正确地做到这一点?


我刚刚看到你写的invalidate没有帮助。你能否验证一下,在调用invalidate后是否会调用onDraw()方法? - peshkira
1
但从这段代码片段来看,似乎您创建了一个新的View并在其上调用invalidate,而不是在onCreate()中已经绘制的View上调用。这只是为了展示如何调用invalidate,还是您确实像这样调用它? - peshkira
我可以通过调试确认,在invalidate之后OnDraw()没有被调用。只有在onCreate时被调用。 - Dukes
你说得很对。我正在创建一个新的视图,然后使其无效化。 - Dukes
1个回答

15

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接