【问题标题】:Redraw View Android重绘视图 Android
【发布时间】:2014-03-06 18:42:29
【问题描述】:

我现在有一个在 onCreate 之后以编程方式添加的视图(取决于其他一些变量)。一切都按原样工作,它画了一个圆圈的一部分。

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

WindRose 代码:

    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,但我也没有得到任何重绘。

我尝试过的无效:

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

从 WindRose 所属的主类中调用。

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

【问题讨论】:

  • 我刚刚看到,你写的,无效没有帮助。您能否验证在您调用 invalidate 后是否调用了 onDraw() 方法?
  • 但是从这段代码 sn-p 看来,您创建了一个新视图并对其调用无效,而不是在您已经在 onCreate() 中绘制的视图上调用。这只是为了显示您如何调用无效,还是完全这样称呼它?
  • 我可以通过调试确认 OnDraw() 在失效后没有被调用。仅调用 onCreate
  • 你说得很好。我创建了一个新视图,然后将其无效..

标签: android view


【解决方案1】:

也许调用视图的invalidate() 方法会有所帮助。

您可以在此处阅读更多信息 (http://developer.android.com/reference/android/view/View.html),但是: “要强制绘制视图,请调用 invalidate()。”

请注意,您也只能使视图的一部分无效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多