2012-03-30 5 views
2

У меня проблема с моими изображениями и кнопками в Android. В принципе, когда я определяю их графику, я использую метод setImageDrawable. Но этот метод делает изображение увеличить и «перелива» вид, как это:Методы setImageDrawable/setBackgroundDrawable размер изображения вопрос

http://img36.imageshack.us/img36/7713/screenshot20120330at211.png

Хотя то, что я должен получить это:

http://img850.imageshack.us/img850/883/screenshot20120330at214.png

Вторая картина, что я получаю, когда я используйте «setBackgroundDrawable» вместо «setImageDrawable». Но это не правильный способ сделать это так ... вот мой код, так что вы можете увидеть, как я продолжу:

 // Button "myButton" initialization 
    this.btn_connexion_off_480x800 = new ImageButton(this.getContext());         // ImageButton instantiation 
    this.btn_connexion_off_480x800.setBackgroundColor(Color.TRANSPARENT);        // Paramétrage du background 
    this.btn_connexion_off_480x800.setImageDrawable(getResources().getDrawable(R.drawable.btn_connexion_off_480x800)); // Graphic source definition 
    this.btn_connexion_off_480x800.setPadding(0, 0, 0, 0);            // Paramétrage des marges intérieures 
    this.img_header_480x800.addView(this.btn_connexion_off_480x800, new AbsoluteLayout.LayoutParams(114, 50, 8, 12)); // Binding to the super view and setting coordinates 

Кто-нибудь знает, почему это происходит?

ответ

0

Попробуйте определить масштабный тип для вашего ImageButton с setScaleType.

Я бы не определил свой макет в коде, попробуйте сделать как можно больше макетов в файлах xml, чтобы полностью отделить поведение от представления.

Также не используйте Абсолютную компоновку с абсолютными значениями пикселей. Если вы определяете макет в xml, используйте блоки dp, как описано в руководстве support multiple screens. Ваш текущий макет будет работать только с одним размером экрана. Если вы используете пиксельные значения в коде, вам необходимо масштабировать их в соответствии с плотностью устройства, это также объясняется в руководстве по поддержке нескольких экранов.

Еще одно небольшое усовершенствование - это метод, который вы используете для установки drawable. ImageButton также определяет метод setImageRessource, это позволит вам напрямую позвонить:

this.btn_connexion_off_480x800.setImageRessource(R.drawable.btn_connexion_off_480x800); 
+0

Sry, но я кодирую свои представления в Java, потому что по каким-то причинам я не могу в XML. – user1173126

+0

Кстати, я пробовал с «setImageRessource», и у него такая же проблема. – user1173126

+0

Вы пробовали setScaleType? Попытайтесь использовать что-то вроде центра или центра Inside как scaleType – Janusz

2

Да, вы настраиваете SRC некоторого фиксированного макета без установки его масштаба типа, сделайте следующее:

Используйте ImageView вместо ImageButton и установить дополнительное свойство ImageView:

this.btn_connexion_off_480x800.setScaleType(ScaleType.FIT_XY); 
+0

Thx, который решает проблему для моего ImageButton. Но у меня все еще есть такая же проблема с ImageView, и код sacetype не работает. – user1173126

+0

imageview, пожалуйста, подробно объясните вашу проблему, чтобы кто-то мог вам помочь – jeet

+0

Настройка scaleType решила проблему для ImageButton's. Но у меня та же проблема, что и у ImageButton с ImageView, за исключением того, что для ImageView, установка scaleType не работает. – user1173126

0

Я попытался с помощью XML

 <ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/Image" 
    android:layout_width="fill_parent" 
    android:layout_height="225px" 
    android:scaleType="fitXY"/> 

try android: scaleType = "centerCrop"

+0

Sry, но я кодирую свои представления в Java, потому что по каким-то причинам я не могу в XML. – user1173126

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