2011-04-12 9 views
0

私は、ImageViewとImageButtonを保持するRelativeLayoutを持っています。 ImageViewは背景画像のコンテナとして機能します。今、私はバックグラウンドイメージ上の同じ位置に常に表示されるように固定位置にボタンを設定しようとしています。あなたはそれが単位としてDPを使用して、左/トップマージンのですが、これがないと、私はボタンを配置しようとした見ることができるようにボタンの動的配置

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/relativeLayout1" android:layout_height="match_parent" 
android:layout_width="match_parent" android:gravity="center_horizontal"> 

<ImageView android:src="@drawable/bg_1" android:id="@+id/imgView" 
    android:adjustViewBounds="true" android:layout_height="match_parent" 
    android:layout_width="match_parent" /> 

<ImageButton android:layout_width="120dp" 
    android:background="@drawable/button_1" android:layout_height="30dp" 
    android:id="@+id/imgButton" android:layout_marginLeft="100dp" 
    android:layout_marginTop="170dp" /> 
</RelativeLayout> 

を:ここで

は、私が使用しているレイアウトファイルであります作業。背景画像は拡大/縮小されているので、その位置は何らかの方法で動的でなければならない。

x-/y-位置のピクセル値を使用した絶対的な配置は、hereのように、Androidでは動作しないものと理解しています。私はまだこれを解決する必要があり、どのように確かではありません。

左余白/上余白の値を計算する必要がありますか(その方法はわかりません)、次のように設定しますか?

final float density = getResources().getDisplayMetrics().density; 
int width = (int)((float)120 * density); 
int height = (int)((float)120 * density); 

RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(width, height); 
rlp.leftMargin = newMargin; 
rlp.topMargin = newTopMargin; 

ImageButton imgButton = (ImageButton) findViewById(R.id.imgButton); 
imgButton.setLayoutParams(rlp); 

希望私は...何かを忘れていなかった

//編集:私は考えていた 、問題の理由は、スケーリングされた画像が別の「国境」を持っていることを、ことによっては可能性があります画面サイズ。 HVGA画面では1:1.6の比率で画像が表示されますが、WVGA画面ではバーが左側にありますが、左右には黒いバーがあります。私はデフォルトのスケーリングを使用していると考えています。私はそれを調べて、必要に応じて再度投稿します...

答えて

0

なぜスケーリングが起こるのですか?異なるデバイスで異なるdpiを使用しているため異なるdpi設定に異なる描画可能性を持っていますか? dpi問題だけでなく、その背景イメージを自由に拡大したい場合、標準レイアウトを使用してジョブを実行することはできません。あなたはカスタムを実装する必要があります。

+0

背景画像のスケーリングを意味する場合。はい、画面の解像度と密度が異なるためです。私は実際にこの問題を解決するためにビューをカスタマイズする必要があるかどうかわかりません。 – taymless

+0

ああbtw。私はさまざまなサイズの私の背景画像を持っていますが、それは画像に適用されるスケーリングの量を減らすので、視覚的な表現に影響すると思っていました。 – taymless

+0

カスタムレイアウトを作成する必要があります。素晴らしい例があります:http://www.google.com/events/io/2009/sessions/TurboChargeUiAndroidFast.html 分44 –