x,y坐标来自xamarin.forms在android中的图像



在我的xamarin.forms项目中,我得到了一个图像。此图像有一个渲染器,看起来像这样:

public class CustomImage : Image
{
public event EventHandler<PointEventArgs> TapEvent;
public void OnTapEvent(int x, int y)
{
TapEvent?.Invoke(this, new PointEventArgs(x, y));
}
}

Android渲染器看起来像这样:

public class ImageRendererAndroid : ImageRenderer
{
private ImageView nativeElement;
private CustomImage formsElement;
protected override void OnElementChanged(ElementChangedEventArgs<Image> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
if (Control != null)
{
Control.Clickable = true;
Control.SetOnTouchListener(ImageTouchListener.Instance.Value);
Control.SetTag(Control.Id, new JavaObjectWrapper<CustomImage> { Obj = Element as CustomImage });
}
}
}
}

当我调用Control.setTag方法时,我得到以下错误:

Java.Lang.IllegalArgumentException: The key must be an application-specific resource id.

Control.Id为157

那么我为什么会出现这个错误,我该如何修复它呢?

感谢

根据SetTag文档,您不能将任何任意值设置为密钥,但应该定义一个应用程序资源id

指定的键应该是在应用程序的资源中声明的id,以确保它是唯一的(请参阅id资源类型)。被识别为属于Android框架或与任何包都不关联的密钥将导致引发IllegalArgumentException。

密钥与您的控件无关,而是指控件中的标签

参数

key:标识标签的密钥

标记:用标记视图的对象

因此,无论如何,传递控件ID似乎不是一个很好的选择。

请参阅关于如何创建资源的android参考。

在XML中定义的唯一资源ID。[…]CCD_ 1。文件名是任意的。

在此文件中,您可以创建一个ID

<?xml version="1.0" encoding="utf-8"?>
<resources>
<item
type="id"
name="id_name" />
</resources>

属性type="id"对于ID资源是必需的。id_name可以更改为您喜欢的任何内容,然后在您的应用程序中引用

Resource.Id.id_name

(Resource类应该在android应用程序的主命名空间中)。

最新更新