Invalidate()不会在Xamarin.Android中调用OnDraw()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Invalidate()不会在Xamarin.Android中调用OnDraw()相关的知识,希望对你有一定的参考价值。

在我的代码中,我使用onTouchEvent()根据我的触摸向下/向上绘制不同的图像。

下面是我的代码示例。

当我在touch_Down中执行Invalidate()时,它不会立即调用onDraw(),而是在touch_Up完成后调用它。所以我总是在OnDraw()之后看到我的touch_Up图像。

请帮忙。

private void MyView_Touch(object sender, TouchEventArgs e)
{
    if (e.Event.Action == MotionEventActions.Down)
    {
        SetSelectedPart(Resource.Drawable.Green);
    }
    else if (e.Event.Action == MotionEventActions.Up)
    {
        SetSelectedPart(Resource.Drawable.Blue);
    }
}

private void SetSelectedPart(int resourceId)
{
    myDrawable = Context.Resources.GetDrawable(resourceId, null);
    Invalidate();
}

protected override void OnDraw(Canvas canvas)
{
    myDrawable.Draw(canvas);
}
答案

我已经测试了你的代码。调用OnDraw方法。我认为没有显示图片的原因是你没有使用SetBounds()方法。

例如:

protected override void OnDraw(Canvas canvas)
{
    if (myDrawable != null)
    {
        myDrawable.SetBounds(0, 0, canvas.Width, canvas.Height);
        myDrawable.Draw(canvas);
    }
}

以上是关于Invalidate()不会在Xamarin.Android中调用OnDraw()的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Firebase 消息传递到 Xamarin.Android 应用程序?

requestLayout invalidate postInvalidate

invalidate() 不刷新视图

为什么说invalidate()不能直接在线程中调用

android中Invalidate和postInvalidate的区别

android中Invalidate和postInvalidate的差别