我创建了一个测试 MvxFrameLayout 派生类,我想在 0,0 处绘制一个大小为 24x24 的孩子:
public class MyCustomLayout : MvxFrameLayout
{
public MyCustomLayout(Context context, IAttributeSet attrs) : base(context, attrs)
{
}
public MyCustomLayout(Context context, IAttributeSet attrs, IMvxAdapterWithChangedEvent adapter) : base(context, attrs)
{
}
protected override void OnLayout(bool changed, int left, int top, int right, int bottom)
{
if (!changed)
{
return;
}
for (int i = 0; i < this.ChildCount; ++i)
{
var child = this.GetChildAt(i);
child.Layout(0, 0, 24, 24);
}
}
}
在这样的活动布局(FirstView.axml)中使用它:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<hotspotappandroid.droid.views.MyCustomLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
local:MvxBind="ItemsSource Hotspots"
local:MvxItemTemplate="@layout/hotspot" />
</FrameLayout>
具有一项的视图模型:
public class FirstViewModel : MvxViewModel
{
public string[] Hotspots { get; private set; }
public FirstViewModel()
{
this.Hotspots = new string[] { "A" };
}
}
hotspot.xml 是一个 ImageView,其图像 (circle.png) 为 24x24:
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/circle" />
问题是没有绘制圆形图像。
如果在hotspot.xml 中我将android:layout_width="fill_parent"
and更改android:layout_height="fill_parent
为wrap_content
,则图像被绘制,但不正确。图像被画成两半。看起来图像被缩放到其大小的两倍,并且被裁剪了一半(可能是由于`child.Layout(0, 0, 24, 24))。
我不确定发生了什么。我看到child
inOnLayout
是类型cirrious.mvvmcross.binding.droid.views.MvxListItemView
而不是“ImageView”,因为这是我所预料的。也许这有关系?