如何在Android中调用CustomView的onDraw(Canvas canvas)函数?

我生成一个椭圆,并尝试根据您可以在下面看到的sweepAngle_speed进行重塑。这个sweepAngle_speed来自Mainactivity.java。在Mainactivity.java中,我创建了一个搜索栏,并且我在seekbar的值和sweepAngle_speed的值之间使用了一种算法,因此我希望椭圆中的填充区域发生变化。 onDraw函数没有直接调用,因此我在我创建的getLog函数中使用了invalidate函数。但是我还是不能调用onDraw函数。运行代码时,系统会直接调用onDraw函数3次,但是,当我更改seekbar值时,无论如何我不会调用onDraw函数。我的第一个问题是,系统如何直接调用onDraw函数?第二个是如何在系统工作期间调用onDraw函数。谢谢。

CustomView.java

public CustomView(Context context,@Nullable AttributeSet attrs) {
    super(context);
    m_Context = context;
    getLog();
    // create the Paint and set its color
}``


@Override
protected void onDraw(Canvas canvas) {
    //c=canvas;
    //super.onDraw(c);
    Paint p1 = new Paint();
    RectF rectF = new RectF(-750,750,720);
    //p1.setColor(Color.parseColor("#34ebe2"));
    p1.setShader(new LinearGradient(0,-360,getHeight(),Color.CYAN,Color.BLUE,Shader.TileMode.MIRROR));
    Log.d(TAG,"CANVAS: onDraw içine girdi ve Speed angle: " + sweepAngle_speed);
    canvas.drawArc(rectF,90,-sweepAngle_speed,true,p1);
}


public void getLog () {
    paint = new Paint();
    paint.setColor(Color.BLUE);
    Log.d(TAG,"Speed geldi buraya ve invalidate yaptı");
    setWillNotDraw(false);
    //this.invalidate();
    this.invalidate();
}

}

whychn 回答:如何在Android中调用CustomView的onDraw(Canvas canvas)函数?

您不能直接调用onDraw。您可以使用使它重绘的invalidate方法

您可以在CustomView类中创建一个函数,例如:

public void setSpeed(int sweepAngle_speed){
    this. sweepAngle_speed = sweepAngle_speed;
    invalidate();  // This invalidate will call onDraw and draw your view again
}
,

如果扩展setWillNotDraw(false),则需要在ViewGroup的构造函数中调用{{1}}

本文链接:https://www.f2er.com/3123780.html

大家都在问