x,y坐标来自android

时间:2017-10-09 12:25:23

标签: android image xamarin.forms

在我的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

那么为什么我会收到此错误以及如何解决?

由于

1 个答案:

答案 0 :(得分:1)

根据word2vec implementation,您无法将任意值设置为键,但应定义应用程序资源ID

  

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

密钥与您的控件无关,但是指的是控件中的标记

  

<强>参数

     

key :标识标记的密钥

     

标记:使用

标记视图的对象

因此传递你的控件ID似乎不是一个非常好的选择。

请参阅SetTag documentation了解如何创建资源。

  

XML中定义的唯一资源ID。   [...]   res/values/filename.xml。文件名是任意的。

在此文件中,您可以创建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应用程序的主命名空间中。)