2011-08-15 5 views
1

カスタムビューを要素として使用してカスタムアダプターによってフィードされたギャラリーがあります。私はこれらの要素がデフォルトで70%縮尺される必要があります。 問題は、ギャラリーが100%サイズのように振る舞い、30%透明パディング=要素間の間隔が大きすぎることです。わかりやすくするために、要素を100%と70%にスケーリングした2つの画像を添付しました。これは、異なる解像度の奇妙な挙動するよう子どものsetScaleX/Yを持つギャラリー

Elements scaled to 100%

Elements scaled to 70%

私はsetSpacingをハードコーディングすることはできません。私は運がないsetSpacing(0)を試しました。 このギャラリーは、元のサイズではなく、小さい(70%)ように動作するのですか?

私はRelativeLayoutを拡張カスタム要素MagazineCellのコンストラクタにsetScaleX/Yを追加することによって、要素をスケーリングている:

public MagazineCell(Context context) { 
    super(context); 

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    layout = (RelativeLayout) inflater.inflate(R.layout.mag_big, null); 
    addView(layout); 

    this.setScaleX(0.7f); 
    this.setScaleY(0.7f); 
} 

IもdrawChild(にスケールを設定しようとした)ないとギャラリー運。アダプタではギャラリーの要素にこのクラスを使用しています:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    MagazineCell cell; 
    position = getPosition(position); 

    if (null == convertView || convertView.getClass() != MagazineCell.class) { 
     cell = new MagazineCell(context); 
    } else { 
     cell = (MagazineCell) convertView; 
    } 

    return cell; 
} 

ギャラリーに特別なコードはありません。 Android 3.1を実行しているAcer Iconia TAB A500でSDK 11を使用しています。

ヒントやコメントありがとうございます。

+0

この問題も発生しました。 –

答えて

0

スケールされたセルの幅を測定するためにギャラリーを「トリックする」方法がないようです。だから私はちょうど負の間隔を使用しました - setSpacing(-100); MagazineCellクラスのonMeasureメソッドをオーバーライドしてスケールされた幅を計算する方法があります。しかし、私はこれを試していませんでした。

0


this.setScaleX(0.7f);
this.setScaleY(0.7f);

this.setPivotX(0);
this.setPivotY(0);