2011-07-02 9 views
13

現在のところ、私のdrawableは通常のサイズに縮尺されています。ここではそれが今どのように見えるかの写真です:ここでボタンの中でdrawableをスケーリングするには?

enter image description here

はボタンのxmlです:

<LinearLayout android:layout_width="wrap_content" 
    android:id="@+id/linearLayout2" android:layout_height="40dp" 
    android:layout_weight="0.4" android:gravity="right|center_vertical" 
    android:paddingRight="5dp"> 
    <Button android:id="@+id/button1" android:background="@drawable/refresh" 
     android:layout_height="25dp" android:layout_width="150dp" 
     android:text="@string/buttonSearchAgain" android:drawableRight="@drawable/refresh_48"></Button> 
</LinearLayout> 

だから私は、それは次のようになりたい:

enter image description here

私のdrawableを縮小する方法はありますか?

答えて

2

イメージを再作成します。画像のサイズはピクセル単位で保持しますが、矢印のサイズを縮小して残りの部分を透明にします。とにかく私の賭けだよ)

+0

私はそれと一緒に行かなければならないように見えます。 –

+1

なぜピクセルはディップより優れていますか? –

+0

私はあなたが私の答えを誤解していると思う:私はピクセルがディップより優れているということではありません。私が「画像サイズをピクセルで保持する...」と書いたとき、私は実際の.png画像であり、いくつかのxml要素ではありません。 – Emiam

0

<Button android:id="@+id/button1" android:background="@drawable/refresh" 
    android:layout_height="25dp" android:layout_width="150dp" 
    android:text="@string/buttonSearchAgain" android:drawableRight="@drawable/refresh_48" 
    android:padding="5dp"></Button> 

を試してみてください(そうandroid:padding="5dp"を追加)

+0

は、今ではこのようになります.png –

0

私はそれを作った!ちょっと面倒だし、ボタンビューを一切使わないことになった。 "ボタン"自体はrelativeLayoutなので、このソリューションを使用するには、ボタンをアニメーション化したい場合には、いくつかのものを用意する必要があります。ここに私のXMLは次のとおりです。あなたは、コード内の化合物描画可能な境界を設定する必要があり、XMLの上に画像を変更したり、拡張することはできませんので

<LinearLayout android:layout_width="wrap_content" 
    android:id="@+id/linearLayout2" android:layout_height="40dp" 
    android:layout_weight="0.4" android:gravity="right|center_vertical" 
    android:paddingRight="5dp"> 
    <RelativeLayout android:layout_height="25dp" 
     android:layout_width="150dp" android:id="@+id/relativeLayout1" 
     android:clickable="true"> 
     <ImageView android:id="@+id/imageView1" android:scaleType="fitXY" 
      android:adjustViewBounds="true" android:layout_width="fill_parent" 
      android:src="@drawable/saywhat" android:layout_height="fill_parent"></ImageView> 
     <LinearLayout android:layout_width="fill_parent" 
      android:id="@+id/linearLayout3" android:weightSum="1" 
      android:layout_height="fill_parent"> 
      <TextView android:layout_weight="0.6" 
       android:layout_height="fill_parent" android:text="TextView" 
       android:layout_width="wrap_content" android:id="@+id/textView1"></TextView> 
      <LinearLayout android:layout_weight="0.4" 
       android:layout_height="fill_parent" android:layout_width="wrap_content" 
       android:id="@+id/linearLayout4"> 
       <ImageView android:id="@+id/imageView2" 
        android:layout_height="wrap_content" android:scaleType="fitXY" 
        android:adjustViewBounds="true" android:layout_width="wrap_content" 
        android:src="@drawable/refresh_48"></ImageView> 
      </LinearLayout> 
     </LinearLayout> 
    </RelativeLayout> 
</LinearLayout> 

は:)

+8

これは非常に非常に不要な複雑なボタンです:P – Jona

+1

それはあまりにも邪悪なボタンになります。 –

+8

何年ものAndroidの経験からこの答えを再訪しても、私はこのように実装することについて考えるべきではないと言っても差し支えありません。 –

3

をお楽しみください。

独自の "CustomButton"でButtonクラスをオーバーライドします。そして、メソッド「SetCompoundDrawables(左、上、右、下)をオーバーライド:

public override void SetCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom) 
    { 
     if (right != null) 
     { 
      var bounds = right.Bounds; 
      right.SetBounds(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom - 70); 
     } 

     if (left != null) 
     { 
      var bounds = left.Bounds; 
      left.SetBounds(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom - 70); 
     } 

     base.SetCompoundDrawables(left, top, right, bottom); 
    } 

私はXamarinを使用していますので、これはC#のコードであることに注意してくださいしかし、Javaコードは、いくつかのuppperのにもかかわらず、(同じである必要があります。

1

ケース、ネーミング・は)私は非常に遅く、私はあなたの問題の解決策を見つけたと思うが、それはあなたがプログラムによってこの問題を解決することができ、他に

Drawable drawable = getResources().getDrawable(R.drawable.s_vit); 
drawable.setBounds(0, 0, (int)(drawable.getIntrinsicWidth()*0.5), 
        (int)(drawable.getIntrinsicHeight()*0.5)); 
ScaleDrawable sd = new ScaleDrawable(drawable, 0, scaleWidth, scaleHeight); 
Button btn = findViewbyId(R.id.yourbtnID); 
btn.setCompoundDrawables(sd.getDrawable(), null, null, null); 
4

を助けるかもしれない:this answerに機能scaleButtonDrawablesを見てください、その関数で。あなたが書き込むことができますあなたの活動のonCreate():(。ボタンの高さはのonCreate(では利用できませんので、あなたはこれを直接呼び出すことはできません)):http://i.imgur.com/7DJL3

final Button button = (Button) findViewById(R.id.button1); 
ViewTreeObserver vto = button.getViewTreeObserver(); 
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
      public boolean onPreDraw() { 
       button.getViewTreeObserver().removeOnPreDrawListener(this); 
       //scale to 90% of button height 
       DroidUtils.scaleButtonDrawables(button, 0.9); 
       return true; 
      } 
     }); 

+0

ありがとう!作品。 – DmitryKanunnikoff

関連する問題