3

私の場合、 path "MyZooSnap.Core;component/Resources/Images/i.jpg". Android のパスを変換するにはImageView? 次のバインディングで使用するには:

{'AssetImagePath':{'Path':'ImagePath'}}

詳細はこちら

似たような質問

ありがとう

4

4 に答える 4

5

素早い回答:

  • Android の画像ファイルが次の場所に保存されている場合assets/images/i1.png
  • 次に、それがとしてマークされていることを確認してくださいAndroidAsset
  • あなたのパスはimages/i1.png

より長い答え:

理想的には、ViewModel はプラットフォームに依存せず、View の問題を認識しない必要があります。

したがって、ViewModel は次のようなプロパティを公開する可能性があります。

 private GameState _state;
 public GameState State 
 { 
     get { return _state; }
     set { _state = value; RaisePropertyChanged(() => State); }
 }

ここで、GameState は次のような列挙です。

 public enum GameState
 {
     Stopped,
     Running,
     Paused,
     GameOver
 }

次に、次のようなアセット構造でこれらの状態を表す画像を作成できます。

/assets/gamestates/stopped.png
/assets/gamestates/running.png
/assets/gamestates/paused.png
/assets/gamestates/gameover.png

これらの各ファイルは、AndroidAsset の BuildAction でマークされています。

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());
    }
}

次のような Converters ラッパーを使用してマップされます。

public class Converters
{
    public readonly GameStateConverter GameState = new GameStateConverter();
}

これは、次を使用して setup.cs で構成されます。

    protected override IEnumerable<Type> ValueConverterHolders
    {
        get { return new[] { typeof(Converters) }; }
    }

これを配置すると、axml バインディング ステートメントは次のようになります。

    {'AssetImagePath':{'Path':'State', 'Converter':'GameState'}}

アセットの代わりにリソースを使用する別のアプローチについては、「GridLayout を Android にバインドする問題MvxButtonIconBinding」を参照してください。

于 2012-10-17T06:41:54.580 に答える
0

問題を解決できませんでした。私の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;
    }
}

私の Converts.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プロジェクト:ここに画像の説明を入力

于 2012-10-17T17:30:46.083 に答える
0

画像がフォルダー Assets に配置され、画像の名前を示すだけで機能します。そして、別のフォルダーを作成してパスを指定すると:

/asset/folder/image.png
asset/folder/image.png
/folder/image.png
folder/image.png

動作しません!

于 2012-10-17T19:16:50.347 に答える