所以我面临的问题不是主观地判断什么对用户最有利(我认为),但有哪些选项可用于说明定位。
想想某种团队运动应用程序,你可以为玩家添加小点(然后我可以用代表玩家的一些UI组件替换点)这样的就可以拖动放下红色和蓝色的点
我用gridview尝试了这个,这很难,因为我需要有一定数量的行/列,当你在一个分辨率更高的手机时它们不会缩放,所以开始攻击“自定义组件” “感觉我正在重新发明轮子。
有没有比写我自己的组件更好的选择?
如果有任何不同,我使用的是xamarin.android
答案 0 :(得分:6)
我使用针对集合绑定的FrameLayout的MvvmCross数据绑定来实现这一点。
此方法的核心使用父TranslationX
内父级TranslationY
内的View
和FrameLayout
属性。
父母是:
<?xml version="1.0" encoding="utf-8"?>
<pointsongrid.BindableFrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/points.on.grid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
local:MvxBind="ItemsSource Points"
local:MvxItemTemplate="@layout/item"/>
列表项目是:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/points.on.grid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
local:MvxBind="TranslationX X, Converter=X;TranslationY Y, Converter=Y"
>
<LinearLayout
android:layout_width="20dp"
android:layout_height="20dp"
local:MvxBind="BackgroundColor Color, Converter=NativeColor"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
local:MvxBind="Text Player"
/>
</LinearLayout>
StackOverflow的整个代码有点长,所以我发布了一个快速回购来演示 - https://github.com/slodge/MvvmCross-Players - 数据绑定FrameLayout肯定可以改进 - 看一下主MvvmCross仓库中的LinearLayout代码如果您需要支持更改列表(例如ObservableCollection)。
结果看起来有点像: