Методы setImageDrawable / setBackgroundDrawable проблема размера изображения - PullRequest
2 голосов
/ 30 марта 2012

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

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

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

Ответы [ 3 ]

2 голосов
/ 30 марта 2012

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

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

this.btn_connexion_off_480x800.setScaleType(ScaleType.FIT_XY); 
0 голосов
/ 30 марта 2012

Я пытался использовать 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"/>

попробуйте android: scaleType = "centerCrop"

0 голосов
/ 30 марта 2012

Попробуйте определить scaleType для кнопки ImageButton с помощью setScaleType .

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

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

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

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