2015-11-08 5 views
1

enter image description hereизображение выходит за пределы ImageButton

Оба ImageButtons и изображения были добавлены программно:

//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? Спасибо!

+0

Привет, мне нужно спросить, для чего вам нужна кнопка, а не просто использовать фон, но с изображением для бомбы и, возможно, отправить больше кода, было бы намного легче помочь. Но если вы предпочитаете, мы могли бы просто сосредоточиться на подгонке изображения кнопкой. – kirotab

+0

@kirotab Мне нужна кнопка, потому что изображение появляется, когда нажимается. Я не думаю, что может потребоваться какой-либо другой код, потому что опубликованный один является единственным, связанным с проблемой. Мне просто нужно установить его внутри ImageButton. Спасибо. – BekaBot

+0

@kirotab, кстати, помните, вы ответили на вопрос о том, как удалить промежутки между элементами этой матрицы? :) Ты сделал этот мой день, еще раз спасибо :) – BekaBot

ответ

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 больше, но установлены на фиксированные значения, но это не проблема, поскольку в первый раз они уже были рассчитаны весом, поэтому он должен работать и на разных устройствах.

Снова мы должны удалить поля, вы можете извлечь эту часть в некоторые предварительно просчитанные переменные, чтобы не делать этого расчета для всех элементов.

0

Самый простой способ исправить это. Я просто хочу изменить размер изображения. Я делал это.

+0

Истинное, но не постоянное исправление Я думаю, что ваш размер больше не динамически вычисляется (я имею в виду, что он взят из размера изображения) – kirotab

+0

@Void Какой размер я должен сделать? – BekaBot

+0

Жаль, что я был вдали от ПК. Просто попробуйте несколько раз, чтобы он соответствовал пространству для него. Нет определенного размера. Просто постарайся уменьшить его, пока он не будет хорош. – Void

Смежные вопросы