【问题标题】:How call onDraw method from another method to draw dynamically?如何从另一个方法调用 onDraw 方法来动态绘制?
【发布时间】:2014-04-22 10:29:11
【问题描述】:

我想在扩展 View 的类中从另一个方法(比如 setProgress)重绘视图。我该怎么做。

我的视图类是

public class SpinView extends View {
    private Paint paint;
    private Context context;
    private Canvas canvas;
    private RectF arcOval;

    public SpinView(Context context) {
        super(context);
        this.context = context;

    }
    public SpinView(Context context, AttributeSet attrs) {
        super(context, attrs, 0);
        this.context = context;
    }

    public SpinView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.context = context;
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        this.canvas = canvas;
        Display d = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
        int width = d.getWidth();
        int height = d.getHeight();
        arcOval = new RectF((width/2-50), (height/2-50), (width/2+50), (height/2+50));
//      RectF arcOval = new RectF(200, 200, 300, 300);
        paint = new Paint();
        paint.setColor(Color.BLUE);
        paint.setStrokeWidth(10);
        paint.setAntiAlias(true);
        paint.setStrokeCap(Paint.Cap.ROUND);
        paint.setStyle(Paint.Style.STROKE);

        canvas.drawArc(arcOval, 270f, 360, false, paint);
    }

    protected void setProgress(float angle){
        paint = new Paint();
        paint.setColor(Color.YELLOW);
        paint.setStrokeWidth(10);
        paint.setAntiAlias(true);
        paint.setStrokeCap(Paint.Cap.ROUND);
        paint.setStyle(Paint.Style.STROKE);

        canvas.drawArc(arcOval, 270f, angle, false, paint);
    }

}

我想要的只是在最初创建的蓝色圆弧上绘制一个黄色圆弧。有什么帮助吗?

【问题讨论】:

  • 您应该在onDraw 中绘制所有内容...您可以调用invalidate 强制重绘视图
  • @Selvin 谢谢好友。我在 setProgress 方法中传递了角度,并使视图无效,并在 onDraw 方法中将扫描角度设置为角度。有效。谢谢
  • @Selvin ,我怎样才能将 sweepAngel 传递给 onDraw ???

标签: android view draw


【解决方案1】:

您可以使用invalidate()方法再次调用ondraw

【讨论】:

    猜你喜欢
    • 2010-12-24
    • 2015-06-16
    • 2019-07-05
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    相关资源
    最近更新 更多