2016-02-09 3 views
1

Используемый класс scaledImageButton для масштабирования подходит кнопкам в ячейках сетки, но как-то он не работает. Когда я сохраняю тип поведения фона класса scaleImageButton для scale_Image_To_Fit, есть пробелы в сетях сеттинга, и если я устанавливаю его в scale_Image_To_FILL, пробелы, созданные выше, решетки выше, заменяются собственным масштабированным изображением. Таким образом, в одной ячейке ячейки есть два дубликата изображения. Коды и скриншоты ниже:Re: ScaleImageLabel is not working fine

Мой код:

GridLayout gr = new GridLayout(1, 2); 
    gr.setAutoFit(true); 
    Container gridContainer = new Container(gr); 
    gridContainer.setUIID("containerGridImgGallery"); 
    gridContainer.getAllStyles().setPadding(0, 0, 0, 0); 
    gridContainer.getAllStyles().setMargin(0, 0, 0, 0); 
    gridContainer.getAllStyles().setBorder(Border.createEmpty()); 
    gridContainer.setScrollableY(true); 
    EncodedImage a = URLImage.createToStorage(placeholder, galleryPhotoTitle + offset + imageId + "bibek", galleryPhotoUrl, URLImage.RESIZE_SCALE_TO_FILL); 
    ScaleImageButton scaleImageButton = new ScaleImageButton(); 
    scaleImageButton.setIcon(a); 
    gridContainer.addComponent(scaleImageButton) 
    f.addComponent(gridContainer); 
    f.revalidate(); 

ScaleImageButton класс:

public class ScaleImageButton extends Button { 

    /** 
    * Default constructor 
    */ 
    public ScaleImageButton() { 
     setUIID("Container"); 
     setShowEvenIfBlank(true); 
     setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FIT); 
    } 

    /** 
    * Create a version with the given image 
    * 
    * @param i image 
    */ 
    public ScaleImageButton(Image i) { 
     setUIID("Container"); 
     setShowEvenIfBlank(true); 
     setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FIT); 
     setIcon(i); 
    } 

    /** 
    * Sets the behavior of the background to one of 
    * Style.BACKGROUND_IMAGE_SCALED_FIT, 
    * Style.BACKGROUND_IMAGE_SCALED_FILL, Style.BACKGROUND_IMAGE_SCALE 
    * 
    * @param behavior the background behavior 
    */ 
    public void setBackgroundType(byte behavior) { 
     getUnselectedStyle().setBackgroundType(behavior); 
     getSelectedStyle().setBackgroundType(behavior); 
     getPressedStyle().setBackgroundType(behavior); 
    } 

    public byte getBackgroundType() { 
     return getUnselectedStyle().getBackgroundType(); 
    } 

    @Override 
    protected Dimension calcPreferredSize() { 
     Image i = getIcon(); 
     if (i == null) { 
      return new Dimension(); 
     } 
     Style s = getStyle(); 
     return new Dimension(i.getWidth() + s.getPaddingLeft(false) + s.getPaddingRight(false), i.getHeight() 
       + s.getPaddingTop() + s.getPaddingBottom()); 
    } 

    public void setIcon(Image i) { 
     getUnselectedStyle().setBgImage(i); 
     getSelectedStyle().setBgImage(i); 
     getPressedStyle().setBgImage(i); 
    } 

    public Image getIcon() { 
     return getUnselectedStyle().getBgImage(); 
    } 


    @Override 
    public void setText(String text) { 
    } 

    @Override 
    public Image getIconFromState() { 
     return getIcon(); 
    } 

    @Override 
    public void setUIID(String id) { 
     Image icon = getIcon(); 
     super.setUIID(id); 
     setIcon(icon); 
    } 
} 

тип фона поведение Style.BACKGROUND_IMAGE_SCALED_FIT поведение

enter image description here

фона типа Style.BA CKGROUND_IMAGE_SCALED_FILL

enter image description here

ответ

0

Существовал ошибка в getAllStyles(), что мы зафиксировали в последнее время. Попробуйте использовать getUnselectedStyle(), чтобы узнать, разрешает ли он проблему до следующего обновления.

+0

Я использовал getAllStyles в gridContainer только для настройки заполнения, поля и границы. Я заменяю их getUnselectedStyle(), getSelectedStyle() и getPressedStyle, но результат такой же. В фоновом режиме отражено изображение. – beck

+0

Как вы изменили значение для масштабирования изображения для заполнения? Похоже, вы изменили его после использования кода соответствия и каким-то образом код подстановки все еще существует? Также использование «Контейнера» для UIID может быть плохой идеей, прозрачной по умолчанию. Используйте UIID, который имеет прозрачность bg, равную 255, чтобы избежать рисования других фонов в рекурсии. –

+0

Я изменяю масштабное изображение, чтобы заполнить конструктор ScaleImageButton. Я использовал Label для конструктора, он не работал, поэтому попробовал контейнер как UIId. Я попробовал Style.BACKGROUND_IMAGE_SCALED, Style.BACKGROUND_IMAGE_SCALED_FIT и Style.BACKGROUND_IMAGE_SCALED_FILL и очистил хранилище, но результат такой же. – beck