Android
Tiroirs
Recherche…
Teinte à dessiner
Un tirable peut être teinté d'une certaine couleur. Cela est utile pour prendre en charge différents thèmes dans votre application et réduire le nombre de fichiers de ressources pouvant être dessinés.
Utilisation des API du framework sur le SDK 21+:
Drawable d = context.getDrawable(R.drawable.ic_launcher);
d.setTint(Color.WHITE);
Utilisation de la bibliothèque android.support.v4 sur le SDK 4+:
//Load the untinted resource
final Drawable drawableRes = ContextCompat.getDrawable(context, R.drawable.ic_launcher);
//Wrap it with the compatibility library so it can be altered
Drawable tintedDrawable = DrawableCompat.wrap(drawableRes);
//Apply a coloured tint
DrawableCompat.setTint(tintedDrawable, Color.WHITE);
//At this point you may use the tintedDrawable just as you usually would
//(and drawableRes can be discarded)
//NOTE: If your original drawableRes was in use somewhere (i.e. it was the result of
//a call to a `getBackground()` method then at this point you still need to replace
//the background. setTint does *not* alter the instance that drawableRes points to,
//but instead creates a new drawable instance
Veuillez ne pas que la int color
ne se réfère pas à une ressource couleur, mais vous n'êtes pas limité aux couleurs définies dans la classe 'Couleur'. Lorsque vous avez une couleur définie dans votre XML que vous souhaitez utiliser, vous devez d'abord obtenir sa valeur.
Vous pouvez remplacer les utilisations de Color.WHITE
utilisant les méthodes ci-dessous
Lorsque vous ciblez les anciennes API:
getResources().getColor(R.color.your_color);
Ou sur des cibles plus récentes:
ContextCompat.getColor(context, R.color.your_color);
Make View avec des coins arrondis
Créez un fichier pouvant être dessiné nommé avec custom_rectangle.xml dans le dossier pouvant être dessiné :
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="@android:color/white" />
<corners android:radius="10dip" />
<stroke
android:width="1dp"
android:color="@android:color/white" />
</shape>
Maintenant, appliquez le fond de rectangle sur View :
mView.setBackGround(R.drawlable.custom_rectangle);
Capture d'écran de référence:
Vue circulaire
Pour une vue circulaire (dans ce cas, TextView
), créez un fichier round_view.xml dans un dossier drawble :
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#FAA23C" />
<stroke android:color="#FFF" android:width="2dp" />
</shape>
Attribuez le dessin à la vue:
<TextView
android:id="@+id/game_score"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@drawable/round_score"
android:padding="6dp"
android:text="100"
android:textColor="#fff"
android:textSize="20sp"
android:textStyle="bold"
android:gravity="center" />
Maintenant, il devrait ressembler au cercle orange:
Personnalisable
Étendez votre classe avec Drawable et remplacez ces méthodes
public class IconDrawable extends Drawable {
/**
* Paint for drawing the shape
*/
private Paint paint;
/**
* Icon drawable to be drawn to the center of the shape
*/
private Drawable icon;
/**
* Desired width and height of icon
*/
private int desiredIconHeight, desiredIconWidth;
/**
* Public constructor for the Icon drawable
*
* @param icon pass the drawable of the icon to be drawn at the center
* @param backgroundColor background color of the shape
*/
public IconDrawable(Drawable icon, int backgroundColor) {
this.icon = icon;
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(backgroundColor);
desiredIconWidth = 50;
desiredIconHeight = 50;
}
@Override
public void draw(Canvas canvas) {
//if we are setting this drawable to a 80dpX80dp imageview
//getBounds will return that measurements,we can draw according to that width.
Rect bounds = getBounds();
//drawing the circle with center as origin and center distance as radius
canvas.drawCircle(bounds.centerX(), bounds.centerY(), bounds.centerX(), paint);
//set the icon drawable's bounds to the center of the shape
icon.setBounds(bounds.centerX() - (desiredIconWidth / 2), bounds.centerY() - (desiredIconHeight / 2), (bounds.centerX() - (desiredIconWidth / 2)) + desiredIconWidth, (bounds.centerY() - (desiredIconHeight / 2)) + desiredIconHeight);
//draw the icon to the bounds
icon.draw(canvas);
}
@Override
public void setAlpha(int alpha) {
//sets alpha to your whole shape
paint.setAlpha(alpha);
}
@Override
public void setColorFilter(ColorFilter colorFilter) {
//sets color filter to your whole shape
paint.setColorFilter(colorFilter);
}
@Override
public int getOpacity() {
//give the desired opacity of the shape
return PixelFormat.TRANSLUCENT;
}
}
Déclarez une image dans votre mise en page
<ImageView
android:layout_width="80dp"
android:id="@+id/imageView"
android:layout_height="80dp" />
Définissez votre dessin personnalisé sur ImageView
IconDrawable iconDrawable=new IconDrawable(ContextCompat.getDrawable(this,android.R.drawable.ic_media_play),ContextCompat.getColor(this,R.color.pink_300));
imageView.setImageDrawable(iconDrawable);
Capture d'écran