我的Android应用有问题。我创建了自定义视图(http://syedwasihaider.github.io/blog/2015/07/12/XamarinViews/直到第2步),覆盖了onDraw,我绘制了黑屏和文本“Draw {i}”,其中i
是每次onDraw发生时递增的数字。我想调用这个方法30次/秒(或60),所以我设置了每33毫秒导致Invalidate()的计时器。
但是Invalidate()根本不会导致onDraw! (这不像是无效和退出之间的延迟,根本没有调用提取)。我试图设置SetWillNotDraw(false)
,但它没有用。这是我的代码:
class DrawCanvas : View
{
Context mContext;
public DrawCanvas(Context context) : base(context)
{
init(context);
}
public DrawCanvas(Context context, IAttributeSet attrs) : base(context, attrs)
{
init(context);
}
public DrawCanvas(Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle)
{
init(context);
}
private void init(Context ctx)
{
mContext = ctx;
black = new Paint() { Color = Color.Black };
white = new Paint() { Color = Color.White };
Timer timer = new Timer(33);
timer.Elapsed += Timer_Elapsed;
timer.Start();
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
Invalidate();
}
int i = 0;
Paint black;
Paint white;
private void TestDraw(Canvas canvas)
{
canvas.DrawRect(0, 0, Width, Height, black);
canvas.DrawText("Draw " + i, 10, 10, white);
i++;
}
protected override void OnDraw(Canvas canvas)
{
TestDraw(canvas);
}
}
我该怎么做:
每33毫秒调用一次渲染
或
获取onDraw方法中使用的画布? (试图在onDraw中保存作为参数出现的画布并在以后使用它,但是有一些奇怪的行为,所以它不起作用)。
答案 0 :(得分:1)
每33毫秒调用一次渲染
您可以使用Handler来实现此功能。
每次DrawCanvas
执行OnDraw
方法时,您都可以向Handler
发送消息,当您收到Handler
中的消息时,可以调用DrawCanvas
1}}的{{1}}方法,此Invalidate
方法将调用Invalidate
方法。它会继续下去。
例如:
OnDraw
效果: