将自定义视图绑定到点

Posted

技术标签:

【中文标题】将自定义视图绑定到点【英文标题】:Binding a custom View to a Point 【发布时间】:2018-02-21 08:18:50 【问题描述】:

我有一个View,这个视图包含一个Point。我想将数据绑定到这一点,但据我了解,我无法在attrs.xml 中创建以Point 为格式的自定义属性。

这是视图:

public class MyView extends android.support.v7.widget.AppCompatImageView 

    private Point point;

    public MyView(Context context) 
        super(context);
    

    public Point getPoint() 
        return point;
    

    public void setPoint(Point point) 
        this.point = point;
    

这是我的对象:

public class MyObject extends BaseObservable 
    private Point point;

    @Bindable
    public Point getPoint() 
        return point;
    

    public void setPoint(Point point) 
        this.point = point;
        notifyPropertyChanged(BR.point);
    

现在我想像这样绑定 MyView:

<MyView
    android:layout_
    android:layout_
    app:point="@myObject.point"/>

还有一个像这样的attrs.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyView">
        <attr name="point" format="Point" />
    </declare-styleable>
</resources>

但这似乎是不可能的。有人知道解决方案吗?

【问题讨论】:

【参考方案1】:

我找到了解决此问题的方法。我没有绑定到Point,而是创建了

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyView">
        <attr name="pointX" format="integer" />
        <attr name="pointY" format="integer" />
    </declare-styleable>
</resources>

然后我将myObject.getPoint().x 的值绑定到pointXmyObject.getPoint().ypointY。这不是最漂亮的解决方案,但它确实有效。

【讨论】:

以上是关于将自定义视图绑定到点的主要内容,如果未能解决你的问题,请参考以下文章

将自定义视图放入自定义 ScrollView

如何将自定义视图动画化为自定义视图

将自定义组件指令绑定到 for 循环中的对象

如何将自定义视图拖动为 Xcode 6 中自定义视图的私有属性

如何将自定义视图添加到布局?

将自定义视图动态添加到 iOS 中的每个视图控制器