缩放按钮内的drawable?

目前我的drawable只是缩放到它的正常大小,我希望它适合我的按钮。 这是现在的样子:

在此处输入图像描述

这是按钮的xml

   

所以我希望它看起来像这样:

在此处输入图像描述

有什么办法可以缩小我的画幅吗?

重新创建图像。 保持图像大小以像素为单位,但减小箭头的大小,使其余部分透明。 无论如何这是我的赌注=)

您可以通过编程方式解决此问题:在此答案中查看函数scaleButtonDrawables 。 使用该function,您可以在活动的onCreate()中写入:

 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; } }); 

(你不能直接调用它,因为onCreate()中没有按钮高度。)

由于无法在xml上修改或缩放图像,因此需要在代码中设置复合可绘制边界。

使用您自己的“CustomButton”覆盖Button类。 然后覆盖方法“SetCompoundDrawables(left,top,right,bottom):

  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); } 

请注意,这是C#代码,因为我使用的是Xamarin。 但是java代码应该是相同的(尽管有一些不成熟的案例命名)

我想我find了你的问题的解决方案,很晚,但它可能会帮助其他人

 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); 

尝试

  

(所以添加android:padding="5dp"

我做到了! 它有点乱,我最终根本没有使用按钮视图。 “按钮”本身是一个relativeLayout,所以如果你想使用这个解决方案,你将不得不摆弄一些来,如果你想按钮animation。 这是我的XML:

            

请享用 :)