在我的情況下路徑"MyZooSnap.Core;component/Resources/Images/i.jpg"
。 如何轉換Android的路徑ImageView
? 爲了使用它在以下綁定:MonoDroid/Android MvvmCross中的路徑ImageView綁定
{'AssetImagePath':{'Path':'ImagePath'}}
感謝
在我的情況下路徑"MyZooSnap.Core;component/Resources/Images/i.jpg"
。 如何轉換Android的路徑ImageView
? 爲了使用它在以下綁定:MonoDroid/Android MvvmCross中的路徑ImageView綁定
{'AssetImagePath':{'Path':'ImagePath'}}
感謝
快速回答:
assets/images/i1.png
AndroidAsset
images/i1.png
較長的答案:
理想的情況下你的視圖模型應該是平臺獨立的,不知道查看關注。
所以你的視圖模型可能也許暴露象一個屬性:
private GameState _state;
public GameState State
{
get { return _state; }
set { _state = value; RaisePropertyChanged(() => State); }
}
,其中游戲狀態是一個枚舉,如:
public enum GameState
{
Stopped,
Running,
Paused,
GameOver
}
你可能會再有較喜歡在資產結構,這些狀態的圖像:
/assets/gamestates/stopped.png
/assets/gamestates/running.png
/assets/gamestates/paused.png
/assets/gamestates/gameover.png
其中每個文件都標有BuildAction AndroidAsset。
要然後在UI中顯示正確的圖像,則需要一個值轉換器,如:
public class GameStateConverter
: MvxBaseValueConverter
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return string.Format("gamestates/{0}.png", ((GameState)value).ToString().ToLower());
}
}
在使用轉換器映射的包裝器,如:
public class Converters
{
public readonly GameStateConverter GameState = new GameStateConverter();
}
其在設置配置。 CS使用:
protected override IEnumerable<Type> ValueConverterHolders
{
get { return new[] { typeof(Converters) }; }
}
有了這個,那麼你的axml綁定語句將是:
{'AssetImagePath':{'Path':'State', 'Converter':'GameState'}}
另一種可選擇的方法使用資源而不是資產,看MvxButtonIconBinding
在Іssue with binding to GridLayout to Android
我無法修復的問題。 My MainViewModel.cs
public class MainMenuViewModel
: MvxViewModel
{
private const string path = "myimage";
public List<SquareModel> Items { get; set; }
public IMvxCommand ShowItemCommand
{
get
{
return new MvxRelayCommand<Type>((type) => this.RequestNavigate(typeof(MainMenuViewModel)));
}
}
public MainMenuViewModel()
{
Items = GetCollection();
}
public List<SquareModel> GetCollection()
{
List<SquareModel> col = new List<SquareModel>();
for (int i = 0; i < 20; i++)
{
col.Add(new SquareModel { ID = i, PathImage = path });
}
return col;
}
}
我的轉換。CS
public class Converters
{
public readonly PathImageConverter GameImage = new PathImageConverter();
}
我PathImageConverter.cs
public class PathImageConverter
: MvxBaseValueConverter
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return string.Format("squareresources/{0}.png", value.ToString().ToLower());
}
}
我Setup.cs
public class Setup
: MvxBaseAndroidBindingSetup
{
public Setup(Context applicationContext)
: base(applicationContext)
{
}
protected override MvxApplication CreateApp()
{
return new App();
}
protected override IEnumerable<Type> ValueConverterHolders
{
get { return new[] { typeof(Converters.Converters) }; }
}
}
我GameView.axml
<cirrious.mvvmcross.binding.android.views.MvxBindableGridView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/MyZooSnap.UI"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="4"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:gravity="center"
local:MvxItemTemplate="@layout/itemimage"
local:MvxBind="{'ItemsSource':{'Path':'Items'}}" />
我ItemImage.axml
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/MyZooSnap.UI"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
local:MvxBind="{'AssetImagePath':{'Path':'PathImage', 'Converter':'GameImage'}}"
/>
我的UI項目 :
當圖像被放置在文件夾中的資產,並表示簡單地表示圖片的名字 - 它的工作原理。 當它創建另一個文件夾並指定路徑:
/asset/folder/image.png
asset/folder/image.png
/folder/image.png
folder/image.png
不行!
<Mvx.MvxImageView
android:layout_width="40dp"
android:layout_height="40dp"
local:MvxBind="AssetImagePath PathImage,Converter=GameImage" />
應該也行
酷!非常感謝你! –
我想澄清。圖像應該總是包含在項目UI中?是? –
是的 - 現在Android可以做一些「資源捆綁」,但是通常所有資源都必須進入UI項目。如果你想在Android,WP7等之間共享圖像文件,那麼你可以在Visual Studio中做'添加爲鏈接'。 – Stuart