API Paint - Shader (rendu d'image)
1. Explication détaillée de la méthode de construction
1)BitmapShader (rendu d'image)
BitmapShader(Bitmap bitmap, Shader.TileMode TileX, Shader .TileMode tuileY )
Utiliser un bitmap comme texture pour remplir une certaine zone, les paramètres sont :
- bitmap : utilisé En tant que bitmap de remplissage ;
- tileX : la forme de connexion des bitmaps dans la direction de l'axe X ;
- tileY : la forme de connexion des bitmaps ; dans la direction de l'axe Y Form ;
Et ce Shader.TileMode a trois types :
- CLAMP signifie que si le rendu dépasse l'original plage limite, la paire de couleurs de bord sera copiée. La coloration des zones au-delà de la plage
- REPEAT est répétée, le rendu sous forme de tuile
- MIRROR est mis en miroir horizontalement et verticalement Rendu répété du bitmap.
2) ComposeShader (rendu mixte)
ComposeShader (Shader shaderA, Shader shaderB, mode PorterDuff.Mode)
La superposition des effets de rendu, vous savez ce que c'est quand vous voyez PorterDuff, non ? Par exemple, rendu mixte de BitmapShader et LinearGradient Effets etc Les paramètres sont dans l'ordre :
- shaderA : le premier effet de rendu
- shaderB : le deuxième effet de rendu
- mode : Mode superposition de deux effets de rendu
3) LinearGradient (rendu linéaire)
LinearGradient(float x0 , float y0, float x1, float y1, int[] colours, float[] positions, Shader.TileMode Tile);
Obtenir un effet de dégradé linéaire de couleurs dans une certaine zone, paramètres Dans l'ordre :
- x0 : coordonnée x du point de départ du dégradé
- y0 : coordonnée y du point de départ du dégradé le dégradé
- x1 : La coordonnée x du point final du dégradé
- y1 : La coordonnée y du point final du dégradé
- colors : Tableau de couleurs du dégradé
- positions : position relative du tableau de couleurs
- tile : méthode de carrelage
4) RadialGradient (rendu en anneau)
public RadialGradient (float x, float y, float radius, int[] couleurs, float[ ] positions, tuile Shader.TileMode);
Pour obtenir un effet de dégradé circulaire de couleur dans une certaine zone, les paramètres sont :
- x : Coordonnée x du centre de l'anneau
- y : La coordonnée y du centre de l'anneau
- rayon : Le rayon de l'anneau
- couleurs : La couleur du dégradé de l'anneau. Tableau
- positions : Spécifiez la position relative du tableau de couleurs
- tile : Méthode de carrelage
5) SweepGradient (rendu dégradé)
public SweepGradient (float cx , float cy, int[] couleurs, float[] positions)
Le rendu par balayage est l'effet formé en tournant le centre d'un certain point pendant un tour ! Les paramètres sont :
- cx : La coordonnée centre x du scan
- cy : La coordonnée centre y du scan
- colors : Tableau de couleurs du dégradé
- positions : Spécifiez la position relative du tableau de couleurs
Peut-être de le texte, nous pouvons simplement connaître une fonction approximative de leurs fonctions correspondantes, mais nous écrivons quand même un code. Vérifiez leur rôle. Après tout, le code (image) a-t-il la vérité ~
2 Utilisez l'exemple de code :
Exécutez le rendu :
Code d'implémentation:
BitmapShaderView.java:
/** * Created by Jay on 2015/11/4 0030. */ public class BitmapShaderView extends View { private Bitmap mBitmap = null; private ShapeDrawable sDrawable = null; private Paint mPaint = null; private int bitW = 0, bitH = 0; //Bitmap宽高 private Shader mBitmapShader = null; //Bitmap渲染 private Shader mLinearGradient = null; //线性渐变渲染 private Shader mComposeShader = null; //混合渲染 private Shader mRadialGradient = null; //环形渐变渲染 private Shader mSweepGradient = null; //梯度渲染 public BitmapShaderView(Context context) { this(context, null); } public BitmapShaderView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public BitmapShaderView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } private void init() { mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.img_cat); bitW = mBitmap.getWidth(); bitH = mBitmap.getHeight(); mPaint = new Paint(); //创建BitmapShader mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR); //创建LinearGradient并设置渐变的颜色数组 mLinearGradient = new LinearGradient(0, 0, 100, 100, new int[]{Color.RED, Color.GREEN, Color.BLUE, Color.WHITE}, null, Shader.TileMode.REPEAT); //混合渲染,这里使用了BitmapShader和LinearGradient进行混合,可以试试其他~ mComposeShader = new ComposeShader(mBitmapShader, mLinearGradient, PorterDuff.Mode.DARKEN); //环形渐变渲染 mRadialGradient = new RadialGradient(50, 200, 50, new int[]{Color.GREEN, Color.RED, Color.BLUE, Color.WHITE}, null, Shader.TileMode.REPEAT); //梯度渲染 mSweepGradient = new SweepGradient(30, 30, new int[]{Color.GREEN, Color.RED, Color.BLUE, Color.WHITE}, null); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //将图片裁剪为椭圆形 sDrawable = new ShapeDrawable(new OvalShape()); sDrawable.getPaint().setShader(mBitmapShader); sDrawable.setBounds(0, 0, bitW, bitH); sDrawable.draw(canvas); //绘制线性渐变的矩形 mPaint.setShader(mLinearGradient); canvas.drawRect(bitW, 0, bitW * 2, bitH, mPaint); //绘制混合渲染效果 mPaint.setShader(mComposeShader); canvas.drawRect(0, bitH, bitW , bitH * 2, mPaint); //绘制环形渐变 mPaint.setShader(mRadialGradient); canvas.drawCircle(bitW * 2.8f, bitH / 2, bitH / 2, mPaint); //绘制梯度渐变 mPaint.setShader(mSweepGradient); canvas.drawRect(bitW, bitH, bitW * 2, bitH * 2, mPaint); } }
Cela fait une centaine exécutez le code. Il n'est pas nécessaire de l'expliquer. Si vous vous sentez confus, essayez-le ~
3. Téléchargez le code de cette section :
Résumé de cette section :
Cette section vous présente une autre API de Paint : Shader (rendu d'image), qui ajoute un autre type de pinceau à notre choix ~ Si vous avez des doutes lorsque vous voyez le code et que vous ne savez pas comment coller le code et modifier les paramètres, vous comprendrez~ Ok, c'est tout pour cette section, merci~