Résumé de 13 Drawables dans Android Partie 2
,
Introduction à cette section :
Dans cette section, nous continuons à en apprendre davantage sur les ressources Drawable dans Android. Nous avons appris dans la section précédente :
D'accord, commençons cette section~
. ColorDrawable;
NinePatchDrawable;
ShapeDrawable;
GradientDrawable !
Ces quatre dessinables~ Dans cette section, nous continuons à apprendre les cinq Drawables suivants, qui sont :
BitmapDrawable
InsertDrawable; >
RotateDrawable;
AnimationDrawable!Publions les guides de 13 types de Drawable :1.BitmapDrawable
Une sorte d'encapsulation de Bitmap, vous pouvez définir le bitmap qu'il enveloppe dans la zone BitmapDrawable Les méthodes de dessin inclure: Remplissez en mosaïque, étirez le remplissage ou conservez la taille d'origine de l'image ! Prenez <
bitmap
> Les attributs facultatifs sont les suivants :src
: Ressources d'image~
- antialias : Prise en charge ou non de l'anti-aliasing
- filtre : s'il faut prendre en charge le filtrage bitmap, s'il est pris en charge, l'affichage de l'image sera plus fluide
- tramage : s'il faut tramer le bitmap
- gravité : Si le bitmap est plus petit que le conteneur, vous pouvez définir la position relative du bitmap dans le conteneur
- tileMode : Spécifiez le mode de remplissage des tuiles le conteneur avec les images, définissez ceci. Si tel est le cas, l'attribut de gravité sera ignoré, avec les valeurs facultatives suivantes :
désactivé- (l'ensemble du motif est étiré et carrelé), clamp (image originale taille), répéter (tuile),miroir(tuile miroir)Rendu correspondant :
①Définition XML BitmapDrawable
:
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:dither="true" android:src="@drawable/ic_launcher" android:tileMode="mirror" />
②Code Java pour obtenir le même effet:
BitmapDrawable bitDrawable = new BitmapDrawable(bitmap); bitDrawable.setDither(true); bitDrawable.setTileModeXY(TileMode.MIRROR,TileMode.MIRROR);
2.InsetDrawable
signifie intégrer un Drawable dans un autre Drawable et laisser de l'espace à l'intérieur. Semblable à l'attribut padding de Drawable, mais
padding
représente la margeentre le contenu deDrawable et le Drawable lui-même ! Et InsetDrawable représente la marge entre les deux Drawables et le conteneur, lorsque l' arrière-plan requis par le contrôle est plus grand que la bordure réelle Quand j'étais jeune , il était plus approprié d'utiliser InsetDrawable. Par exemple, utiliser ceci peut résoudre le problème entre notre boîte de dialogue personnalisée et l'écran. Un problème d'espacement, je crois que les amis qui l'ont fait savent que même si on définit layout_margin, cela ne sert à rien. Vous pouvez utiliser cet InsetDrawable à tout moment ! Définissez simplement un insetXxx pour InsetDrawable et définissez différents La marge dans la direction, puis définissez-la comme arrière-plan de la boîte de dialogue ! Les attributs associés sont les suivants :
- 1.drawable : Le Drawable référencé, s'il est vide, doit avoir un nœud enfant de type Drawable !
- 2.visible : Définir si Drawable a de l'espace
- 3.insetLeft,insetRight,insetTop,insetBottm : définir à gauche , à droite, de haut en bas Marges de
① Utilisation en XML :
<?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/test1" android:insetBottom="10dp" android:insetLeft="10dp" android:insetRight="10dp" android:insetTop="10dp" />Utilisation en code Java :
InsetDrawable insetDrawable = new InsetDrawable(getResources() .getDrawable(R.drawable.test1), 10, 10, 10, 10);Utiliser les rendus :
3. ClipDrawable
Le clip peut être traduit par coupé, nous peut utiliser ClipDrawable Cela signifie couper une partie du bitmap ; La barre de progression sous Android est implémentée à l'aide de ClipDrawable, qui détermine le découpage en fonction de la valeur de niveau définie. La taille de la zone, le nœud racine est <clip>
Les propriétés pertinentes sont les suivantes :
- clipOrietntion : définissez la direction du découpage, vous pouvez définir les directions horizontale et verticale
- gravité : commencez à recadrer à partir de cette position
- drawable : La ressource drawable référencée si elle est vide, elle doit avoir un nœud enfant de type Drawable. ps : Ce nœud enfant de type Drawable : ajoutez simplement une telle instruction dans <clip> :
De cette façon... Exemple d'utilisation :
Core : Modifiez la valeur de niveau de ClipDrawable via le code ! La valeur du niveau est de 0 à 10 000 !
Exécution des rendus :
Implémentation du code :
① Définir une ressource ClipDrawable xml:
<?xml version="1.0" encoding="utf-8"?> <clip xmlns:android="http://schemas.android.com/apk/res/android" android:clipOrientation="horizontal" android:drawable="@mipmap/ic_bg_meizi" android:gravity="left" />②Définissez une ImageView dans le fichier de mise en page principal Activity_main et définissez src sur clipDrawable !N'oubliez pas que c'est src, si si vous l'écrivez comme blackground, un pointeur nul sera signalé !!! Oui, c'est intéressant Ne me demandez pas de prendre la photo de la fille ~
4. > est utilisé pour faire pivoter Drawable, et cela se fait également via setLevel Pour contrôler la rotation, la valeur maximale est également : 10000
Les attributs pertinents sont les suivants:
- fromDegrees : angle de départ, correspondant à la valeur du niveau le plus bas, la valeur par défaut est 0
- toDegrees : angle de fin, correspondant au valeur de niveau le plus élevé, la valeur par défaut est 360
- pivotX : définissez la coordonnée x du point de référence, la valeur est 0~1, la valeur par défaut est 50 %, soit 0,5
- pivotY : définissez la coordonnée Y du point de référence, la valeur est 0~1, la valeur par défaut est 50 %, soit 0,5 ps : Si l'image pivotée n'est pas entièrement affichée, vous pouvez modifier les deux valeurs ci-dessus pour résoudre le problème
- drawable : Définissez la ressource bitmap
- visible : Définissez si le dessinable est visible !
Le diagramme d'angle est le suivant :
Exemple d'utilisation :
Exécution de rendus :
Implémentation du code:
Dans le troisième Faites juste une petite modification sur le clipDrawable sur lequel vous cliquez !
①Définissez un fichier de ressources rotateDrawable :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/img_show" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/clip_bg" /> </LinearLayout>②Modifiez src dans Activity_main.xml pour pointer vers le dessin ci-dessus. Voilà, MainActivity n'a qu'à changer ClipDrawable en rotateDrawable !
public class MainActivity extends AppCompatActivity { private ImageView img_show; private ClipDrawable cd; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0x123) { cd.setLevel(cd.getLevel() + 500); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); img_show = (ImageView) findViewById(R.id.img_show); // 核心实现代码 cd = (ClipDrawable) img_show.getDrawable(); final Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { handler.sendEmptyMessage(0x123); if (cd.getLevel() >= 10000) { timer.cancel(); } } }, 0, 300); } }AnimationDrawable
:Le dernier Drawable de cette section, AnimationDrawable est utilisé pour implémenter une animation Android mid-frame, qui consiste à convertir une série de Les animations dessinables, jouées image par image dans un certain ordre, sont relativement riches, y compris les animations d'interpolation traditionnelles, les panoramiques, Zoom et autres effets, mais ici nous introduisons uniquement cet AnimationDrawable pour implémenter une animation d'image, sur l'alpha, l'échelle, traduire, faire pivoter, etc. seront présentés en détail dans le chapitre sur l'animation plus tard ~
Nous utilisons <animation-list> >
Méthodes d'attributs associésoneshot
: définissez s'il faut lire en boucle, false signifie la lecture en boucle !!!:durée : frame temps d'intervalle, généralement nous le réglerons sur 300 millisecondes Après avoir obtenu l'instance AniamtionDrawable, nous devons appeler sa méthode start() pour lire l'animation. De plus, nous devons y prêter attention. S'il est appelé dans la méthode OnCreate(), cela n'aura aucun effet car la vue n'a pas encore terminé son initialisation. Utilisez un simple gestionnaire pour retarder la lecture de l'animation ! Bien sûr, il existe d'autres méthodes, voir le lien suivant : Plusieurs façons d'exécuter Android AnimationDrawable Il est vraiment très pratique d'utiliser AnimationDrawable pour implémenter une animation d'image ~
Exemple d'utilisationExécution de rendus
:Implémentation du code
:①Définissez d'abord un fichier de ressources XML AnimationDrawable
:<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@mipmap/ic_launcher" android:fromDegrees="-180" android:pivotX="50%" android:pivotY="50%" />②activity_main.xml set src, puis dans MainActivity :public class MainActivity extends AppCompatActivity { private ImageView img_show; private RotateDrawable cd; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0x123) { if (cd.getLevel() >= 10000) Toast.makeText(MainActivity.this, "转完了~", Toast.LENGTH_LONG).show(); cd.setLevel(cd.getLevel() + 400); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); img_show = (ImageView) findViewById(R.id.img_show); // 核心实现代码 cd = (RotateDrawable) img_show.getDrawable(); final Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { handler.sendEmptyMessage(0x123); if (cd.getLevel() >= 10000) { timer.cancel(); } } }, 0, 100); } }Hé, c'est super simple. À l'avenir, lorsque vous aurez besoin d'utiliser l'animation par images, utilisez simplement AnimationDrawable directement. Bien sûr, cela ne convient qu'aux animations d'images qui ne nécessitent pas de contrôle. Par exemple, ce qui précède est le matériau de la barre de progression lorsque la super table est déroulée pour être actualisée. Une animation d'image simple réalisée ! Développez selon vos propres besoins~
Résumé de cette section :
Cette section présente cinq autres Drawables C'est très intéressant, n'est-ce pas ? Appliquez-le à votre développement réel ~ Hé hé, c'est tout, merci ! En plus, un lecteur vient de m'envoyer un message privé me demandant de ne pas supprimer mes articles précédents. Bon, parlons-en ici. Supprimez uniquement certains doublons, comme les sections similaires à celle-ci ~ Bien sûr, je les sauvegarderai également ! Les articles supprimés seront sauvegardés ~ Alors ne vous inquiétez pas !