How to change color of vector drawable path on button click

后端 未结 9 1780
北荒
北荒 2020-12-01 00:33

With the new android support update, vector drawables get backward compatibility. I have a vector image with various paths. I want the color of the paths to change on click

相关标签:
9条回答
  • 2020-12-01 01:24

    Check my answer on this other question: https://stackoverflow.com/a/38418049/1335438.

    It is a great idea on how to manage this by using Themes and parameterizing the paths in order to be able to set them dynamically.

    0 讨论(0)
  • 2020-12-01 01:25

    You can use this method to change color in lower API to change vector color in fragment

    int myVectorColor = ContextCompat.getColor(getActivity(), R.color.colorBlack);
                        myButton.getIcon().setColorFilter(myVectorColor, PorterDuff.Mode.SRC_IN);
    

    in place of getActivity you should use MainActivity.this for changing vector color in activity

    0 讨论(0)
  • 2020-12-01 01:27

    You can change the color of individual path at runtime, without using reflection.

    VectorMaster introduces dynamic control over vector drawables. Each and every aspect of a vector drawable can be controlled dynamically (via Java instances), using this library.

    Just add the following dependency in your app's build.gradle

    dependencies {
        compile 'com.sdsmdg.harjot:vectormaster:1.0.9'
    }
    

    In your case you need a simple color change:

    Vector example: your_vector.xml

    <vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:name="outline"
        android:pathData="M20.84,4..."
        android:strokeColor="#5D5D5D"
        android:fillColor="#00000000"
        android:strokeWidth="2"/>
    

    XML:

    <com.sdsmdg.harjot.vectormaster.VectorMasterView
        android:id="@+id/your_vector"
        android:layout_width="150dp"
        android:layout_height="150dp"
        app:vector_src="@drawable/your_drawable" />
    

    Java:

    VectorMasterView heartVector = (VectorMasterView) 
    findViewById(R.id.your_drawable);
    
    // find the correct path using name
    PathModel outline = heartVector.getPathModelByName("outline");
    
    // set the stroke color
    outline.setStrokeColor(Color.parseColor("#ED4337"));
    
    // set the fill color (if fill color is not set or is TRANSPARENT, then no fill is drawn)
    outline.setFillColor(Color.parseColor("#ED4337"));
    

    From: https://github.com/harjot-oberai/VectorMaster, licensed under MIT.

    You have now full control over vector drawables.

    0 讨论(0)
提交回复
热议问题