2012-02-24 3 views
0

私のアプリでは、UIの一部としてボタンバーを構築しています(これはレイアウト全体ではなく、ボタンバー部分のみです)。Android:topDrawableのボタンで奇妙なスケーリングの問題

<LinearLayout android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:layout_centerHorizontal="true" 
    android:paddingTop="10dp"> 

    <Button android:id="@+id/btnTopObjects" 
     android:layout_width="70dp" 
     android:layout_height="55dp" 
     android:drawableTop="@drawable/media_guide_object" 
     android:text="@string/media_screen_top_objects" 
     android:background="@drawable/media_guide_button" 
     android:textSize="9dp"/> 

    <Button android:id="@+id/btnTrails" 
     android:layout_width="70dp" 
     android:layout_height="55dp" 
     android:drawableTop="@drawable/media_guide_trail" 
     android:text="@string/media_screen_trails" 
     android:background="@drawable/media_guide_button" 
     android:layout_marginLeft="5dp" 
     android:textSize="9dp" /> 

    <Button android:id="@+id/btnEvents" 
     android:layout_width="70dp" 
     android:layout_height="55dp" 
     android:drawableTop="@drawable/media_guide_event" 
     android:text="@string/media_screen_events" 
     android:background="@drawable/media_guide_button" 
     android:layout_marginLeft="5dp" 
     android:textSize="9dp" /> 

    <Button android:id="@+id/btnVenueInfo" 
     android:layout_width="70dp" 
     android:layout_height="55dp" 
     android:drawableTop="@drawable/media_guide_venue" 
     android:text="@string/media_screen_venue_info" 
     android:background="@drawable/media_guide_button" 
     android:layout_marginLeft="5dp" 
     android:textSize="9dp" /> 
</LinearLayout> 

これは、320x480の画面でテストすると合理的に正しい結果が得られます。ボタンバーは、私がしたい正確に何である、次のようになります。何の

enter image description here

enter image description here

しかし480X800解像度の画面を持つデバイス上で、同じボタンバーは次のようになります本当に奇妙なのは、4つのボタンがどのように表示されるかです。最初の3つの画像は縮小され、最後の画像はフルサイズで表示されます。

すべての4つの画像は、同じグラフィックスプログラムで同じ方法で作成されます。それらはすべて31x31ピクセル72dpiです。デバイスのピクセル密度に合わせてすべて縮小すれば問題はありませんが、4つのイメージを同じサイズにしたいのです!どうすればこれを達成できますか?

事前のお手伝いがあります。

+0

「venue info」の画像がdrawable-hdpiフォルダに存在しないため、drawableまたはdrawable-mdpiの画像が拡大されている(またはその逆) – tonys

答えて

0

私はこの問題を次のように追跡しました。

ビューがXMLから作成されたら、いくつかの条件のコードでは、画像をビットマップに読み込んで、このビットマップをsetCompoundDrawableメソッドを使用してボタンにBitmapDrawableとして設定する前にいくつかの操作を実行します。

XMLを最初に読み込んでビューに設定すると、4つの画像すべてが最後のボタン(大きな画像)のように表示されます。ビットマップを読み込んだら、その上で何らかの変換を行い、それをボタンのドロウアブルとして設定します。これは、デバイスの画面密度に基づいて縮小されたときです。最初の3つのボタンにはドロウアブルが調整されており、最後のボタンには必要ないものがありました。

調整する必要があるかどうかにかかわらず、常にビットマップを読み込んで、すべてのボタンの描画可能な部分をボタンに設定するコードを修正しました。この方法では、4つのボタンすべてが同じサイズの画像で表示されません(画面密度に基づいてスケーリングされますが、すべて同じサイズ)。