图像在ImageButton之外

时间:2015-11-08 09:57:48

标签: java android imagebutton

enter image description here

ImageButtons和Image都是以编程方式添加的:

//some code...
int pixelsToDp = convertToPixelsDp(-4.5f);
params.setMargins(pixelsToDp, pixelsToDp, pixelsToDp, pixelsToDp);
//some code...
ImageButton btn = new ImageButton(this);
                    btn.setPadding(0, 0, 0, 0);
                    btn.setLayoutParams(params);
                    btn.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    buttonRow.add(btn);

图像由setBackgroundResource()函数添加。如何使图像完全在ImageButton内?谢谢!

2 个答案:

答案 0 :(得分:1)

在新文件中添加此类,但测试可能是同一个文件

class MyImageButton extends ImageButton
{
    MyImageButton(Context context){
        super(context);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh){
        Log.v("measure", "width:" + w + " height:" + h);
        if(w != h) {

            TableRow.LayoutParams params = new TableRow.LayoutParams(
                    w, w
            );
            int pixelsToDp = convertToPixelsDp(-4.5f);
            params.setMargins(pixelsToDp, pixelsToDp, pixelsToDp, pixelsToDp);
            this.setLayoutParams(params);
        }
    }
}

现在使用新创建的类而不是原始的ImageButton

ImageButton btn = new MyImageButton(this);

如果您希望缩放图像

,也可以更改此设置
btn.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

(我已经使用btn.setImageResource(R.drawable.ic_launcher);进行了测试)

如果有效,可以进行一些解释:)

在我们的ImageButton扩展类中,我们覆盖了onSizeChanged,我们正在设置新的布局参数,它们不再由weight计算,而是设置为固定值,但这不是问题,因为它们第一次已经通过重量计算,所以它也应该在不同的设备上工作。

我们必须再次移除边距,您可以在一些预先计算的变量中提取该部分,以便不对所有项目进行此计算。

答案 1 :(得分:0)

解决这个问题的最简单方法。只是改变图片尺寸。我这样做了。