Вы знаете, что можете удалить ответ, не так ли?

ажения (значки) имеют примерно одинаковый размер, но мне нужно изменить их размер, чтобы кнопки оставались одинаковой высоты.

Как мне это сделать?

Button button = new Button(this);
button.setText(apiEventObject.getTitle());
button.setOnClickListener(listener);

/*
 * set clickable id of button to actual event id
 */
int id = Integer.parseInt(apiEventObject.getId());
button.setId(id);

button.setLayoutParams(new LayoutParams(
        android.view.ViewGroup.LayoutParams.FILL_PARENT,
        android.view.ViewGroup.LayoutParams.WRAP_CONTENT));

Drawable drawable = LoadImageFromWebOperations(apiSizeObject.getSmall());
//?resize drawable here? drawable.setBounds(50, 50, 50, 50);
button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
 Zelimir01 февр. 2011 г., 21:42
Вы нашли способ, как изменить размер Drawable (Bitmap)?
 William T. Mallard22 нояб. 2013 г., 10:14
Уже поздно, но интересно, почему ты не звонилsetCompoundDrawables()? Внутренний относится к исходному размеру изображения в других местах в Android, напримерDrawable.getIntrinsicHeight().

Ответы на вопрос(10)

Button button = new Button(this);
Button = (Button) findViewById(R.id.button01);

Button.setHeight() или жеButton.setWeight() и установите значение.

 Iharob Al Asimi16 авг. 2015 г., 17:58
Вы знаете, что можете удалить ответ, не так ли?
 user37556605 янв. 2011 г., 23:03
это просто устанавливает высоту кнопки, а не высоту рисования. я хочу установить ширину / высоту отрисовки (особенно если она больше, чем заданная высота кнопки).

Укажите размер сsetBounds()т.е. для использования размером 50х50

drawable.setBounds(0, 0, 50, 50);

public void setBounds (int слева, int сверху, int справа, int снизу)

 gregm27 июл. 2012 г., 17:14
У меня тоже не работает
 Andras Balázs Lajtha17 окт. 2011 г., 17:02
Была такая же проблема, и это не сработало для меня.
 gregm27 июл. 2012 г., 17:21
На самом деле setBounds работает для GradientDrawables. Это просто не работает для Image Drawables.
 Kostadin15 февр. 2012 г., 11:46
После SetBounds размер остается прежним. Может быть, нужно сделать недействительным?
 noloman25 мая 2012 г., 15:30
то же самое здесь, остается тем же

чтобы понять, почему метод setBounds () не работает с растровым изображением, как ожидалось, но у меня есть небольшое улучшенное решение @ androbean-studio, чтобы делать то, что должен делать setBounds ...

/**
 * Created by ceph3us on 23.05.17.
 * file belong to pl.ceph3us.base.android.drawables
 * this class wraps drawable and forwards draw canvas
 * on it wrapped instance by using its defined bounds
 */
public class WrappedDrawable extends Drawable {

    private final Drawable _drawable;
    protected Drawable getDrawable() {
        return _drawable;
    }

    public WrappedDrawable(Drawable drawable) {
        super();
        _drawable = drawable;
    }

    @Override
    public void setBounds(int left, int top, int right, int bottom) {
        //update bounds to get correctly
        super.setBounds(left, top, right, bottom);
        Drawable drawable = getDrawable();
        if (drawable != null) {
            drawable.setBounds(left, top, right, bottom);
        }
    }

    @Override
    public void setAlpha(int alpha) {
        Drawable drawable = getDrawable();
        if (drawable != null) {
            drawable.setAlpha(alpha);
        }
    }

    @Override
    public void setColorFilter(ColorFilter colorFilter) {
        Drawable drawable = getDrawable();
        if (drawable != null) {
            drawable.setColorFilter(colorFilter);
        }
    }

    @Override
    public int getOpacity() {
        Drawable drawable = getDrawable();
        return drawable != null
                ? drawable.getOpacity()
                : PixelFormat.UNKNOWN;
    }

    @Override
    public void draw(Canvas canvas) {
        Drawable drawable = getDrawable();
        if (drawable != null) {
            drawable.draw(canvas);
        }
    }

    @Override
    public int getIntrinsicWidth() {
        Drawable drawable = getDrawable();
        return drawable != null
                ? drawable.getBounds().width()
                : 0;
    }

    @Override
    public int getIntrinsicHeight() {
        Drawable drawable = getDrawable();
        return drawable != null ?
                drawable.getBounds().height()
                : 0;
    }
}

использование:

// get huge drawable 
final Drawable drawable = resources.getDrawable(R.drawable.g_logo);
// create our wrapper           
WrappedDrawable wrappedDrawable = new WrappedDrawable(drawable);
// set bounds on wrapper 
wrappedDrawable.setBounds(0,0,32,32); 
// use wrapped drawable 
Button.setCompoundDrawablesWithIntrinsicBounds(wrappedDrawable ,null, null, null);

Результаты

до:после:

nSizeChanged.

Я хотел иметь масштабируемые составные элементы рисования в моих текстовых представлениях, которые не требовали от меня возиться с определением растровых элементов рисования в XML и т. Д., И сделал это следующим образом:

public class StatIcon extends TextView {

    private Bitmap mIcon;

    public void setIcon(int drawableId) {
    mIcon = BitmapFactory.decodeResource(RIApplication.appResources,
            drawableId);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        if ((w > 0) && (mIcon != null))
            this.setCompoundDrawablesWithIntrinsicBounds(
                null,
                new BitmapDrawable(Bitmap.createScaledBitmap(mIcon, w, w,
                        true)), null, null);

        super.onSizeChanged(w, h, oldw, oldh);
    }

}

(Обратите внимание, что я использовал w дважды, а не h, так как в этом случае я помещал значок над текстом, и поэтому значок не должен иметь такую ​​же высоту, как текстовое представление)

Это может быть применено к фоновым объектам или любому другому размеру, который вы хотите изменить относительно размера вашего представления. onSizeChanged () вызывается при первом просмотре, поэтому вам не нужны особые случаи для инициализации размера.

Использовать

textView.setCompoundDrawablesWithIntrinsicBounds()

Ваш minSdkVersion должен быть 17 в build.gradle

    defaultConfig {
    applicationId "com.example..."
    minSdkVersion 17
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"
}

Чтобы изменить размер рисунка:

    TextView v = (TextView)findViewById(email);
    Drawable dr = getResources().getDrawable(R.drawable.signup_mail);
    Bitmap bitmap = ((BitmapDrawable) dr).getBitmap();
    Drawable d = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap, 80, 80, true));

    //setCompoundDrawablesWithIntrinsicBounds (image to left, top, right, bottom)
    v.setCompoundDrawablesWithIntrinsicBounds(d,null,null,null);

tLayerInset:

Drawable[] layers = new Drawable[1];
layers[0] = application.getResources().getDrawable(R.drawable.you_drawable);

LayerDrawable layerDrawable = new LayerDrawable(layers);
layerDrawable.setLayerInset(0, 10, 10, 10, 10);

{your view}.post(new Runnable()
    {
        @Override
        public void run()
        {
            Drawable image = context.getResources().getDrawable({drawable image resource id});
            image.setBounds(0, 0, {width amount in pixels}, {height amount in pixels});
            {your view}.setCompoundDrawables(image, null, null, null);
        }
    });

немного поздно. Но вот решение, которое, наконец, сработало для меня в любой ситуации.

Идея состоит в том, чтобы создать собственный чертеж с фиксированным внутренним размером и передать задание на рисование в исходный чертеж.

Drawable icon = new ColorDrawable(){
        Drawable iconOrig = resolveInfo.loadIcon(packageManager);

        @Override
        public void setBounds(int left, int top, int right, int bottom){
            super.setBounds(left, top, right, bottom);//This is needed so that getBounds on this class would work correctly.
            iconOrig.setBounds(left, top, right, bottom);
        }

        @Override
        public void draw(Canvas canvas){
            iconOrig.draw(canvas);
        }

        @Override
        public int getIntrinsicWidth(){
            return  mPlatform.dp2px(30);
        }

        @Override
        public int getIntrinsicHeight(){
            return  mPlatform.dp2px(30);
        }
    };

setBounds() метод не работает для каждого типа контейнера (работал для некоторых из моихImageViewх, однако).

Попробуйте метод ниже для масштабирования самого рисованного объекта:

// Read your drawable from somewhere
Drawable dr = getResources().getDrawable(R.drawable.somedrawable);
Bitmap bitmap = ((BitmapDrawable) dr).getBitmap();
// Scale it to 50 x 50
Drawable d = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap, 50, 50, true));
// Set your new, scaled drawable "d"
 林果皞09 янв. 2019 г., 21:12
Как примечание вы можете создатьStateListDrawable программно и использоватьaddState метод с этим "преобразованным drawable", чтобы он работал дляselector's item размер используется вsetPasswordVisibilityToggleDrawable.
 Sanket Berde16 мар. 2017 г., 19:11
Это создаст пикселизацию при масштабировании рисованных объектов. Даже если они являются векторными рисунками.
 noloman25 мая 2012 г., 15:31
для меня проблема здесь в том, что он рисует белый прямоугольник вокруг нарисованного изображения
 Andy10 окт. 2012 г., 18:56
Конструктор BitmapDrawable (Bitmap) устарел. Использование: Drawable d = new BitmapDrawable (getResources (), Bitmap.createScaledBitmap (bitmap, 50, 50, true));
 Pierre24 мая 2018 г., 12:27
вероятно, хотите использоватьContextCompat.getDrawable(context, resourceid)

wable в ScaleDrawable

drawable = new ScaleDrawable(drawable, 0, width, height).getDrawable();

после того

drawable.setBounds(0, 0, width, height);

будет работать

 azizbekian17 мая 2018 г., 13:22
Зачем нужен этот шаг? Какая упаковка вScaleDrawable дает альтернативу без упаковки?

Ваш ответ на вопрос