Установите изображение в ImageButton в Android
у меня есть 6 ImageButton в моей деятельности, я устанавливаю изображения через мой код в них ( не используя xml).
Я хочу, чтобы они покрывали 75% площади кнопки. Но там, где некоторые изображения занимают меньше площади, некоторые из них слишком велики, чтобы вписаться в imageButton. Как программно изменить размер и показать их?
Ниже приведен снимок экрана

ниже приведен XML-файл
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp" >
<LinearLayout
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_topleft"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_topright"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
</LinearLayout>
<LinearLayout
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_repeat"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_next"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
</LinearLayout>
<LinearLayout
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_bottomleft"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_bottomright"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
</LinearLayout>
</LinearLayout>
и фрагмент
класса MyClass.java:
public void addImageButtons()
{
iB_topleft = (ImageButton) findViewById(R.id.button_topleft);
iB_topright = (ImageButton) findViewById(R.id.button_topright);
iB_bottomleft = (ImageButton) findViewById(R.id.button_bottomleft);
iB_bottomright = (ImageButton) findViewById(R.id.button_bottomright);
iB_next = (ImageButton) findViewById(R.id.button_next);
iB_repeat = (ImageButton) findViewById(R.id.button_repeat);
}
public void setImageNextAndRepeat()
{
iB_topleft .setImageResource(R.drawable.aa);
iB_topright.setImageResource(R.drawable.bb);
iB_bottomleft.setImageResource(R.drawable.cc);
iB_bottomright.setImageResource(R.drawable.dd);
iB_next.setImageResource(R.drawable.next);
iB_repeat.setImageResource(R.drawable.repeat);
}
7 ответов:
Я хочу, чтобы они покрывали 75% площади кнопки.
использовать
android:padding="20dp"(отрегулируйте заполнение по мере необходимости), чтобы контролировать, сколько изображение занимает на кнопке.но где, как некоторые изображения охватывают меньше площади, некоторые из них слишком велики, чтобы вписаться в imageButton. Как программно изменить размер и показать их?
использовать
android:scaleType="fitCenter"чтобы иметь Android масштабировать изображения, иandroid:adjustViewBounds="true"чтобы они корректировали свои границы из-за масштабирования.все эти атрибуты могут быть установлены в коде на каждом
ImageViewво время выполнения. Однако, на мой взгляд, гораздо проще установить и просмотреть в xml.и не использовать
spдля всего, кроме размера текста, он масштабируется в зависимости от предпочтения размера текста, установленного пользователем, поэтому вашspразмеры будут больше, чем предполагалось, если пользователь имеет "большой" текст настройки. Используйтеdpвместо этого, поскольку он не масштабируется размером текста пользователя предпочтение.вот фрагмент того, как должна выглядеть каждая кнопка:
<ImageButton android:id="@+id/button_topleft" android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginBottom="5dp" android:layout_marginLeft="2dp" android:layout_marginRight="5dp" android:layout_marginTop="0dp" android:layout_weight="1" android:adjustViewBounds="true" android:padding="20dp" android:scaleType="fitCenter" />
см ниже ссылку и попытаться найти то, что вы действительно хотите:
ImageView.ScaleType CENTER центрирует изображение в представлении, но выполняет нет масштабирования.
ImageView.ScaleType CENTER_CROP равномерно масштабирует изображение (поддерживает соотношение сторон изображения), так что оба размеры (ширина и высота) изображение будет равно или больше соответствующего размер вида (минус отступ).
ImageView.ScaleType CENTER_INSIDE масштабировать изображение равномерно (поддерживать соотношение сторон изображения), так что оба размеры (ширина и высота) изображение будет равно или меньше соответствующего размера вида (минус обивка).
ImageView.ScaleType FIT_CENTER масштабирует изображение с помощью CENTER.
ImageView.ScaleType FIT_END масштабирует изображение с помощью END.
ImageView.ScaleType FIT_START масштабирует изображение с помощью START.
ImageView.ScaleType FIT_XY масштабирует изображение с помощью заливки.
ImageView.Масштабирование матрицы ScaleType с использованием матрицы изображения при рисовании.
https://developer.android.com/reference/android/widget/ImageView.ScaleType.html
недавно я случайно узнал, что, поскольку у вас больше контроля над ImageView, вы можете установить onclicklistener для изображения вот пример динамически созданной кнопки изображения
private int id; private bitmap bmp; LinearLayout.LayoutParams familyimagelayout = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT ); final ImageView familyimage = new ImageView(this); familyimage.setBackground(null); familyimage.setImageBitmap(bmp); familyimage.setScaleType(ImageView.ScaleType.FIT_START); familyimage.setAdjustViewBounds(true); familyimage.setId(id); familyimage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //what you want to do put here } });
он хорошо работал в моем случае. Сначала вы загружаете изображение и переименовываете его как iconimage, находите его в папке drawable. Вы можете изменить размер, установив
android:layout_widthилиandroid:layout_height. Наконец, у нас есть<ImageButton android:id="@+id/answercall" android:layout_width="120dp" android:layout_height="80dp" android:src="@drawable/iconimage" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:scaleType="fitCenter" />

Comments