101 votes

Android - Définir la taille dessinable par programme

Les images (icônes) ont à peu près la même taille, mais je dois les redimensionner pour que les boutons restent à la même hauteur.

Comment puis-je faire cela?

 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);
 

172voto

e_x_p Points 1221

La méthode setBounds() ne fonctionne pas pour tous les types de conteneurs (elle a toutefois fonctionné pour certains de mes ImageView ).

Essayez la méthode ci-dessous pour redimensionner le dessin lui-même:

 // 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"
 

33voto

jkhouw1 Points 4856

Spécifiez la taille avec setBounds() , c'est-à-dire pour une taille 50x50, utilisez

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

public void setBounds (int gauche, int haut, int droite, int bas)

13voto

iBog Points 549

Avant d’appliquer .setBounds (..), essayez de convertir Drawable actuel en ScaleDrawable

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

après ça

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

marchera

3voto

OneEyeQuestion Points 68

Utilisez la méthode de publication pour obtenir l’effet souhaité:

 {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);
        }
    });
 

0voto

Zulaxia Points 1572

Vous pouvez créer une sous-classe du type de vue, et de remplacer les onSizeChanged méthode.

Je voulais avoir de mise à l'échelle composé un drawable sur mon texte qui n'a pas besoin de moi pour s'amuser avec la définition de bitmap un drawable en xml, etc. et il l'a fait de cette façon:

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);
    }

}

(Notez que j'ai utilisé w deux fois, pas de h, comme dans ce cas je met l'icône au-dessus du texte, et donc l'icône ne devrait pas avoir la même hauteur que l'affichage de texte)

Ceci peut être appliqué à l'arrière-plan un drawable, ou tout ce que vous voulez redimensionner par rapport à votre taille. onSizeChanged() est appelée la première fois le point de Vue est faite, de sorte que vous n'avez pas besoin tout cas spéciaux pour initialisation de la taille.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X