2016-11-18 5 views
1

Я могу программно изменить цвет векторных чертежей, но я хочу применить штрих к векторному рисунку. Мне нужен метод, который изменит вектор Drawable ход во время выполнения:Set Border/Stroke to Vector Drawable Programmatically

enter image description here

ранее я использовал этот метод, но не в моем случае.

i конвертировал вектор в растровое изображение, а затем применял границу с этой функцией, но заполнял все черным, удар не применялся.

private static Bitmap getBitmap(VectorDrawable vectorDrawable) 
    { 
     Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(), 
     vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 
     vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
     vectorDrawable.draw(canvas); 
     return bitmap; 
    } 
    private static Bitmap getBitmap(Context context, int drawableId) 
    { 

     Drawable drawable = ContextCompat.getDrawable(context, drawableId); 
     if (drawable instanceof BitmapDrawable) 
     { 
      return ((BitmapDrawable) drawable).getBitmap(); 
     } 
     else if (drawable instanceof VectorDrawable) 
     { 
      return getBitmap((VectorDrawable) drawable); 
     } 
     else 
     { 
      throw new IllegalArgumentException("unsupported drawable type"); 
     } 
    } 
private Bitmap addWhiteBorder(Bitmap bmp, int borderSize) 
    { 
     Bitmap bmpWithBorder = Bitmap.createBitmap(bmp.getWidth() + borderSize*2 , bmp.getHeight() + borderSize*2 , bmp.getConfig()); 
     Canvas canvas = new Canvas(bmpWithBorder); 
     canvas.drawColor(Color.BLACK); 
     canvas.drawBitmap(bmp, borderSize, borderSize, null); 
     return bmpWithBorder; 
    } 

ответ

0

Предположим, вы VectorDrawable определены в vectordrawable.xml

<vector 
    android:width="100dp" 
    android:height="100dp" 
    android:viewportWidth="100" 
    android:viewportHeight="100"> 
    <path 
     android:name="headset" 
     android:strokeColor="#FF000000" 
     android:strokeWidth="0" 
     ... 
     android:pathData="..." /> 
</vector> 

Затем вы можете определить AnimatedVectorDrawable изменить strokeWidth

<?xml version="1.0" encoding="utf-8"?> 
<animated-vector 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/vectordrawable"> 
    <target 
     android:animation="@animator/change_stroke_width" 
     android:name="headset" /> 

</animated-vector> 

Наконец, определить анимацию, которая изменяет strokeWidth in change_stroke_width.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android" > 
    <objectAnimator 
     android:duration="100" 
     android:propertyName="strokeWidth" 
     android:valueFrom="0" 
     android:valueTo="10" /> 
</set> 
+0

Я предполагаю, что это нарисует рамку прямоугольника вокруг растрового изображения, тогда как я хочу добавить штрих/границу к пути векторного рисования (или созданного из него растрового изображения) @Doris – waqas

+0

Я добавил изображение, о котором идет речь, пожалуйста, см. @Doris – waqas

+0

Да, ответ выше дал бы прямоугольную рамку. После просмотра изображения, которое вы добавили, я предполагаю, что этот VectorDrawable может быть представлен одним путем, и в этом случае вам нужно будет определить strokeWidth и strokeColor для достижения этой черной контуры/границы. –