0

je mon habitude Drawable comme ceci:obtenir les paramètres personnalisés étirables de xml

public class SeekBarBackgroundDrawable extends Drawable { 
    Paint mBasePaint = null; 

    public SeekBarBackgroundDrawable() { 
     super(); 

     mBasePaint = new Paint(); 
     mBasePaint.setAntiAlias(true); 
     mBasePaint.setStyle(Paint.Style.STROKE); 
     mBasePaint.setStrokeCap(Paint.Cap.ROUND); 
     mBasePaint.setStrokeWidth(10); 
     mBasePaint.setColor(0xFF00FF00); 

    } 

    @Override 
    public void draw(Canvas canvas) {  
     Rect r = getBounds(); 
     canvas.drawLine(r.left, canvas.getHeight()/2,r.right,canvas.getHeight()/2, mBasePaint); 
    } 

Maintenant, ce drawable est utilisé dans layer-list avec des paramètres color et width comme ici:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:id="@android:id/background"> 
     <cdev.mypreferences.SeekBarBackgroundDrawable 
     android:width="1dp" android:color="@color/bg_color"> 

     </cdev.mypreferences.SeekBarBackgroundDrawable> 
    </item> 
    <item android:id="@android:id/progress"> 
     <clip> 
      <shape android:shape="rectangle"> 
       <corners android:radius="20dp"></corners> 
       <solid android:color="@color/seekbar_progress"></solid> 
      </shape> 
     </clip> 
    </item> 

</layer-list> 

Comment puis-je obtenir les paramètres de ce xml en Drawable classe? Je dois définir mBasePaint largeur de trait et couleur?

Répondre

1

Declaring custom drawables in xml est possible de faire à partir de l'API 24, mais je ne pouvais pas réussir à le faire en utilisant la première approche mentionnée dans les docs.

Néanmoins, comme la question se rapporte à d'autres aspects, je vais essayer de répondre à cette partie.

Ajout dans votre classe renverrait les valeurs qui vous intéressent sur mesure dans Drawable:

 

    private final int[] attrsArray = new int[] { 
     android.R.attr.width, 
     android.R.attr.color, 
    }; 

    @Override public void inflate(@NonNull Resources r, @NonNull XmlPullParser parser, 
     @NonNull AttributeSet attrs) throws XmlPullParserException, IOException { 
    super.inflate(r, parser, attrs); 

    final TypedArray a = r.obtainAttributes(attrs, attrsArray); 
    float width = a.getDimensionPixelSize(0, 0); 
    @SuppressLint("ResourceType") 
    int color = a.getColor(1, 0); 

    a.recycle(); 
    }