2017-08-11 37 views
1

XamarinのViewBoxには、画像の縦横比を維持できる代替手段はありますか?XamarinフォームでのViewBoxの代替方法

Windows PhoneアプリケーションをXamarinフォームに変換しています。私の画面のほとんどは、クリック可能な画像があり、ここで画像部分のX座標をキャプチャします。私はViewBoxに私のすべての画像を持っているので、画面の大きさや解像度に関係なく、画像のxyの位置が同じになるように、縦横比を維持しています。

ネイティブコントロールでこれを行うにはXamarin.IOSで公開しています。

+0

私の知る限り、iOSやAndroidのビューボックスの動作を模倣した既存のコントロールはありません。 iOSは、親コンテナ内のコントロールを整理するためにユニバーサル制約のシステムを使用します。同様の原理がアンドロイドにも存在します。 – Digitalsa1nt

+0

グリッドを試してみてください。比率を維持します。 1つのキャッチがあります。割り当てられた高さを正しくスケーリングしません。私の答えを参照して、私は別の答えでそれを解決しました –

+0

こんにちは、私はあなたの別の答えを知っているかもしれませんか?私はここで何も見つかりませんでした。 – Praddy

答えて

0

残念ながら、Xamain.formsのBoxViewはWPの同名のものと異なります。

RelativeLayoutは少し複雑ですが柔軟性があります。アプリが異なるサイズの画面で実行されるとき、コントロールはあなたの制約に従ってそれらに適応します。

例えば:

<RelativeLayout> 
    <Image BackgroundColor="Red" Source="Icon-76.png" Aspect="Fill" x:Name="redBox" 
     RelativeLayout.XConstraint="{ConstraintExpression 
      Type=RelativeToParent, 
      Property=Width, 
      Factor=0.05, 
      Constant=0}" 
     RelativeLayout.YConstraint="{ConstraintExpression 
      Type=RelativeToParent, 
      Property=Y, 
      Factor=1, 
      Constant=20}" 
     RelativeLayout.WidthConstraint="{ConstraintExpression 
      Type=RelativeToParent, 
      Property=Width, 
      Factor=.6, 
      Constant=0}" 
     RelativeLayout.HeightConstraint="{ConstraintExpression 
      Type=RelativeToParent, 
      Property=Height, 
      Factor=.6, 
      Constant=0}" /> 
</RelativeLayout> 

enter image description here

RelativeLayout.XConstraintRelativeLayout.YConstraintあなたのコントロールのY座標、Xを見つけます。

RelativeLayout.WidthConstraintRelativeLayout.HeightConstraintコントロールと幅/高さの制約を追加するために使用されます。

例では、この画像の(x、y)は、親に対して相対的な((親の幅の5%),20)です。幅や高さは親の60%です。

RelativeLayout.XConstraint="{ConstraintExpression 
      Type=RelativeToView, 
      ElementName=redBox, 
      Property=Width, 
      Factor=1, 
      Constant=0}" 

ConstraintExpression:: - 制約があるかどうかを

タイプもちろん、あなたがこのようなタイプのElementNameを介して他のビューへの相対値でそれを設定することができます親または別のビューに対して相対的に表示されます。

プロパティ - 制約の基準として使用するプロパティ。

ファクタ - プロパティ値に適用するファクタ。

定数 - 値のオフセットとして使用する値。

要素名 - 制約が関連するビューの名前です。

そして、あなたはあなたのイメージのための適切な表示を見つけるために、Aspectを設定することができます。

<Image Source="Icon-76.png" Aspect="Fill"/> 

AspectFillスケールビューを満たす画像。一部の部分は、ビューを埋めるためにクリップされることがあります。

AspectFitビューに合わせて画像を拡大/縮小します。一部の部分は空白のままです(レターボクシング)。

塗りつぶし画像が拡大表示されるように拡大縮小します。

+0

こんにちはKevin、お返事ありがとうございます。ただし、RelativeLayoutとAspectFitを使用すると、イメージのサイズは常に同じになり、スクリーンのサイズに合わせて拡大されません。また、XY座標は画面サイズによって異なります。それを制御する方法はありますか?画面の画像のサイズにかかわらずXY座標を同じにしたい。どんな提案も大歓迎です。 – Praddy

+0

@Praddy、私は私の答えを更新しました。 'Aspect =" Fill "を使って画面のサイズに合わせて調整します。また、x、y座標は、親または他のビューの幅/高さの特定のパーセンテージとして設定することができます。「XConstraintの更新」を参照してください。 –

関連する問題