Как реализовать андроид: фон, который не растягивается?

Я нашел эту замечательную тему, описывающую, как «съесть пирог и иметь его», т. ImageButton Использовать изображение для Button вместо ImageButton (что не позволяет SetText() , изменение размера и т. Д.).

Это достигается с помощью атрибута «Вид»:

 android:background="@drawable/bgimage" 

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

За исключением жесткого кодирования фиксированного размера кнопки (в пикселях!), Есть ли способ сказать Android не растягивать фоновое изображение вообще и ни обрезать, ни подставить его?

Вы должны использовать ImageView, если вы не хотите, чтобы он растягивался. Фоновые изображения всегда будут растягиваться, чтобы соответствовать представлению. Вы должны установить его как Drawable, чтобы заставить объект изображения к объекту.

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

Например, в вашем

 OnCreate(Bundle bundle) { //set content layout, etc up here //now adjust button sizes Button B = (Button) findViewById(R.id.somebutton); int someDimension = 50; //50pixels B.setWidth(someDimension); B.setHeight(someDimension); } 

Вы можете создать bitmap xml и использовать его в качестве фона для представления. Чтобы предотвратить растяжку, вы можете указать атрибут android:gravity .

например:

    

Существует множество опций, которые вы можете использовать для настройки рендеринга изображения

http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap

Просто использование ImageButton вместо Button устраняет проблему.

  

и вы можете установить

 android:background="@null" 

для удаления фона кнопки, если хотите.

Быстрая починка !! 🙂

Я использую ImageView в RelativeLayout, который накладывается на мой обычный макет. Не требуется код. Он изменяет изображение на всю высоту экрана (или любой другой макет, который вы используете), а затем обрезайте изображение влево и вправо, чтобы соответствовать ширине. В моем случае, если пользователь поворачивает экран, изображение может быть слишком маленьким. Поэтому я использую match_parent, который сделает изображение растянутым по ширине, если оно будет слишком маленьким.

      

У меня была та же проблема: вы должны использовать только 9-патч-изображение (.9.png) вместо исходного изображения.

саржа

Используйте draw9patch …, входящий в состав инструментов SDK для Android Studio. Вы можете определить растяжимые области вашего изображения. Важные детали ограничены, и изображение не выглядит искаженным. Хорошая демонстрация на dra9patch – ЗДЕСЬ

Используйте draw9patch для изменения существующего splash.png в new_splash.9.png, перетащите new_splash.9.png в папку проекта drawable-hdpi, чтобы убедиться, что AndroidManifest и styles.xml являются правильными, как показано ниже:

AndroidManifest.xml:

  

styles.xml:

  

У меня было фоновое изображение, не большого по размеру, но с фантастическими размерами – поэтому растяжка и плохая производительность. Я сделал метод с параметрами Context, View и drawable ID (int), который будет соответствовать размеру экрана устройства. Используйте это, например, в fragmentе onCreateView для установки фона.

 public void setBackground(Context context, View view, int drawableId){ Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),drawableId); bitmap = Bitmap.createScaledBitmap(bitmap, Resources.getSystem(). getDisplayMetrics().widthPixels, Resources.getSystem().getDisplayMetrics().heightPixels, true); BitmapDrawable bitmapDrawable = new BitmapDrawable(context.getResources(), bitmap); view.setBackground(bitmapDrawable); } 

Вот версия ответа Сантоша для программно созданных кнопок, без необходимости отдельной XML-конфигурации:

 Button button = new Button(getContext()); Bitmap backgroundBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_button); BitmapDrawable backgroundDrawable = new BitmapDrawable(getResources(), backgroundBitmap); backgroundDrawable.setGravity(Gravity.CENTER); // also LEFT, CENTER_VERTICAL, etc. backgroundDrawable.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP)); button.setBackground(backgroundDrawable); 

Я включил линию ColorFilter, так как это работает немного иначе, чем кнопки с обычным фоновым изображением.

Ключ состоит в том, чтобы установить рисование как изображение кнопки, а не как фон. Как это:

 rb.setButtonDrawable(R.drawable.whatever_drawable); 

Можно использовать простой ImageView в своем xml и сделать его интерактивным (android: clickable = “true”)? Вы должны использовать только как src изображение, которое было сформировано как кнопка, то есть круглые углы.

Вы можете использовать FrameLayout с ImageView в качестве первого дочернего FrameLayout а затем ваш обычный макет как второй ребенок:

       
  • Маска ImageView с круглым фоном угла
  • getSize () дает мне ошибки
  • android: Как я могу реализовать первый учебник, например Go Launcher в моем приложении?
  • android Множественный выбор ListView & Textview
  • Какова цель тега Android в XML-макетах?
  • Почему мы должны использовать макеты xml?
  • Как масштабировать SVG-изображение, чтобы заполнить окно браузера?
  • Как создать горизонтальный ListView с помощью RecyclerView?
  • Просмотр с горизонтальным и вертикальным панорамированием / drag and dropм и усилением
  • Android и получение представления с литой идентификатором в виде строки
  • Android Studio не показывает предварительный просмотр макета
  • Interesting Posts
    Давайте будем гением компьютера.