【发布时间】:2020-03-07 05:07:22
【问题描述】:
我生成一个椭圆,并尝试根据您可以在下面看到的 sweepAngle_speed 重塑形状。这个 sweepAngle_speed 来自 MainActivity.java。在 MainActivity.java 中,我创建了一个 seekbar,并在 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, 0, 750, 720);
//p1.setColor(Color.parseColor("#34ebe2"));
p1.setShader(new LinearGradient(0, -360, 0, 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();
}
}
【问题讨论】:
-
你有重绘功能吗?
-
其实我改变了sweepAngle_speed。它是在代码顶部定义的,我没有放在这里。同样在日志 Log.d(TAG, "CANVAS: onDraw içine girdi ve Speed angle: " + sweepAngle_speed);我可以看到变化。但是这个变化不会影响角度,我的意思是我不能调用 onDraw 函数
-
我使用了无效而不是重绘功能,但它不起作用
标签: android canvas android-custom-view ondraw android-view-invalidate