Coder Social home page Coder Social logo

vectorchildfinder's Introduction

VectorChildFinder

Android Arsenal GitHub license

VectorChildFinder helps to find inner elements of vector drawable like path and group.

Demo

VectorChildFinder

Dependency

  • Add the dependencies to your gradle files:

Step 1. Add it in your root build.gradle at the end of repositories

   allprojects {
       repositories {
    	...
    	maven { url 'https://jitpack.io' }
    	}
    }

Step 2. Add the dependency

    dependencies {
        compile 'com.github.devsideal:VectorChildFinder:1.0.0'
     }

Usage

VectorChildFinder vector = new VectorChildFinder(this, R.drawable.my_vector, imageView);

VectorDrawableCompat.VFullPath path1 = vector.findPathByName("path1");
path1.setFillColor(Color.RED);

VectorDrawableCompat.VGroup group1 = vector.findGroupByName("group1");
group1.setTranslateX(10);

imageView.invalidate();

Used by

Gym Scheduler

License

Copyright 2018 Deven Singh

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

vectorchildfinder's People

Contributors

devendroid avatar devmike01 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vectorchildfinder's Issues

Is there any animated-vector support?

I get error trying to use this library with animated-vector.

Here's my animated-vector:

<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"> <aapt:attr name="android:drawable"> <vector android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> <path android:name="root" android:strokeWidth="2" android:strokeLineCap="square" android:fillColor="#000000" android:pathData="M4.8,13.4 L9,17.6 M10.4,16.2 L19.6,7" /> </vector> </aapt:attr> <target android:name="root"> <aapt:attr name="android:animation"> <objectAnimator android:propertyName="pathData" android:valueFrom="M4.8,13.4 L9,17.6 M10.4,16.2 L19.6,7" android:valueTo="M6.4,6.4 L17.6,17.6 M6.4,17.6 L17.6,6.4" android:duration="300" android:interpolator="@android:interpolator/fast_out_slow_in" android:valueType="pathType" /> </aapt:attr> </target> </animated-vector>

Here's my code:

VectorChildFinder finder = new VectorChildFinder(getContext(), iconRes, icon); VectorDrawableCompat.VFullPath path = finder.findPathByName("root"); Log.i("!!!!!!!!!!", "path: " + path); if (path != null) { path.setFillColor(Utils.getColorFromString(getContext(), device.getDeviceId())); }

Here's my logcat:

2020-08-21 13:00:11.070 10360-10360/com.test.test E/VectorDrawableCompat: parser error org.xmlpull.v1.XmlPullParserException: Binary XML file line #2<vector> tag requires viewportWidth > 0 at com.devs.vectorchildfinder.VectorDrawableCompat.updateStateFromTypedArray(VectorDrawableCompat.java:561) at com.devs.vectorchildfinder.VectorDrawableCompat.inflate(VectorDrawableCompat.java:494) at com.devs.vectorchildfinder.VectorDrawableCompat.createFromXmlInner(VectorDrawableCompat.java:456) at com.devs.vectorchildfinder.VectorDrawableCompat.create(VectorDrawableCompat.java:437) at com.devs.vectorchildfinder.VectorChildFinder.<init>(VectorChildFinder.java:22) at com.test.test.views.MyCardView.setIcon(MyCardView.java:171) at com.test.test.views.MyCardView.prepareDevice(MyCardView.java:66) at com.test.test.views.MyCardView.updateUi(MyCardView.java:58) at com.test.test.presenters.MyPresenter.onBindViewHolder(MyPresenter.java:44) at com.test.test.presenters.MyPresenter.onBindViewHolder(MyPresenter.java:17) at com.test.test.presenters.AbstractCardPresenter.onBindViewHolder(AbstractCardPresenter.java:32) at androidx.leanback.widget.Presenter.onBindViewHolder(Presenter.java:140) at androidx.leanback.widget.ItemBridgeAdapter.onBindViewHolder(ItemBridgeAdapter.java:422) at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7308) at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6175) at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6441) at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6281) at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6277) at androidx.leanback.widget.GridLayoutManager.measureScrapChild(GridLayoutManager.java:1302) at androidx.leanback.widget.GridLayoutManager.processRowSizeSecondary(GridLayoutManager.java:1386) at androidx.leanback.widget.GridLayoutManager.onMeasure(GridLayoutManager.java:1490) at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3710) at android.view.View.measure(View.java:24552) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552) at android.widget.LinearLayout.measureVertical(LinearLayout.java:842) at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) at android.view.View.measure(View.java:24552) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552) at android.widget.LinearLayout.measureVertical(LinearLayout.java:842) at android.widget.LinearLayout.onMeasure(LinearLayout.java:721) at android.view.View.measure(View.java:24552) at androidx.leanback.widget.GridLayoutManager.measureChild(GridLayoutManager.java:1582) at androidx.leanback.widget.GridLayoutManager$2.createItem(GridLayoutManager.java:1684) at androidx.leanback.widget.SingleRow.appendVisibleItems(SingleRow.java:113) at androidx.leanback.widget.Grid.appendOneColumnVisibleItems(Grid.java:389) at androidx.leanback.widget.GridLayoutManager.appendOneColumnVisibleItems(GridLayoutManager.java:1852) at androidx.leanback.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:2282) at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4277) at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3980) at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4546) at android.view.View.layout(View.java:21934) at android.view.ViewGroup.layout(ViewGroup.java:6260) at androidx.leanback.widget.ScaleFrameLayout.onLayout(ScaleFrameLayout.java:173) at android.view.View.layout(View.java:21934) 2020-08-21 13:00:11.074 10360-10360/com.test.test E/VectorDrawableCompat: at android.view.ViewGroup.layout(ViewGroup.java:6260) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:21934) at android.view.ViewGroup.layout(ViewGroup.java:6260) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:21934) at android.view.ViewGroup.layout(ViewGroup.java:6260) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:21934) at android.view.ViewGroup.layout(ViewGroup.java:6260) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout(View.java:21934) at android.view.ViewGroup.layout(ViewGroup.java:6260) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673) at android.widget.LinearLayout.onLayout(LinearLayout.java:1582) at android.view.View.layout(View.java:21934) at android.view.ViewGroup.layout(ViewGroup.java:6260) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at com.android.internal.policy.DecorView.onLayout(DecorView.java:779) at android.view.View.layout(View.java:21934) at android.view.ViewGroup.layout(ViewGroup.java:6260) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3080) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2590) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1721) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7598) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966) at android.view.Choreographer.doCallbacks(Choreographer.java:790) at android.view.Choreographer.doFrame(Choreographer.java:725) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

PathParser is not public dont use createNodesFromPathData,

Unfortunately, the PathParser class is not Pablic.
Therefore, you can not access PathDataNode from another package.
Because the class is only visible in its own package.
For example, the methods createNodesFromPathData, createPathFromPathData are not visible.
Also the inner class and the data type "PathDataNode" are not visible.
The inner class is public, but the outer class is not public. Therefore, you can not create the PathDataNode data type and use the getPathData setPathData method.
I loaded your package into my project and changed the class to public.
So I can also use the methods createNodesFromPathData, and setPathData.
Importing via compile 'com.github.devsideal: VectorChildFinder: 1.0.0' does not make sense to me, as long as you have not changed that.

Gradle Error

Hello sir
i was trying to implement your library, And followed your steps but when i run the application its shows me some kind of an error
check the attachment file to see the error
i am waiting for your response
thank you
screenshot from 2018-04-04 13-18-19
screenshot from 2018-04-04 13-18-50

Change textview background color

Hello, how I can use your lib to change paths of a image, but this image are a TextView background?

I tried it, but not working:

val image = ImageView(context)

            val vector = VectorChildFinder(context, R.drawable.tag, image)
            val path1 = vector.findPathByName("body")
            val path2 = vector.findPathByName("fold")
            path1.setFillColor(Color.RED)

            image.invalidate()
            firstTag.background = ContextCompat.getDrawable(context, R.drawable.tag)

change color path in animated-vector not working(<path android:name="root" android:fillColor>)

in this format:

<animated-vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt">
    <aapt:attr name="android:drawable">
        <vector
            android:width="24dp"
            android:height="24dp"
            android:viewportWidth="24"
            android:viewportHeight="24">
            <path
                android:name="root"
                android:strokeWidth="2"
                android:strokeLineCap="square"
                android:fillColor="#000000"
                android:pathData="M4.8,13.4 L9,17.6 M10.4,16.2 L19.6,7" />
        </vector>
    </aapt:attr>
    <target android:name="root">
        <aapt:attr name="android:animation">
            <objectAnimator
                android:propertyName="pathData"
                android:valueFrom="M4.8,13.4 L9,17.6 M10.4,16.2 L19.6,7"
                android:valueTo="M6.4,6.4 L17.6,17.6 M6.4,17.6 L17.6,6.4"
                android:duration="300"
                android:interpolator="@android:interpolator/fast_out_slow_in"
                android:valueType="pathType" />
        </aapt:attr>
    </target>
</animated-vector>

Update maven repository

Hello, I've noticed that the line 1513 on this code is different from the actual class on maven repository, that is declarated as private.

gradle: Could not download VectorChildFinder.aar

I'm trying to sync an Android project that has used this library since last fall, but suddenly I'm getting an issue with just syncing the gradle. I've tried "invalidate caches/restart" and the usual clean-up techniques but no luck. Any ideas?

Can't use this anymore?

I tried to add this dependency, and I got this error when trying to build&run:

e: Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath:
    class com.devs.vectorchildfinder.VectorDrawableCommon, unresolved supertypes: android.support.v4.graphics.drawable.TintAwareDrawable
Adding -Xextended-compiler-checks argument might provide additional information.

Any way to fix this?

VectorDrawableChangerTest.zip

https://github.com/devendroid/VectorChildFinder/files/11108955/studio64_2023-03-30_10-26-26.zip

Confusing documentation

Hi,

You request the image view for VectorChildFinder but also you have to invalidate the image for drawable refresh.

However, you never say in the README the needing about that method, I saw it in the example code. Could you add it to the documentation for better understanding please?

Thanks!

Can't find ColorStateList from drawable resource ID #0x7f080006

The library seems to crash whenever it tries inflate a vector which as a gradient in it. (see example file below)

<vector xmlns:aapt="http://schemas.android.com/aapt"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="27dp"
        android:height="32dp"
        android:viewportHeight="31.7"
        android:viewportWidth="27">
    <path
        android:fillColor="#7d173a"
        android:pathData="M13.4,0a54.4,54.4 0,0 1,5.9 0.5,40.5 40.5,0 0,1 5.6,1.5 35.2,35.2 0,0 1,1.6 6.4,46.8 46.8,0 0,1 0.5,7c0,3 -1.2,6.1 -3.7,9.4a20.3,20.3 0,0 1,-9.8 6.9,18.8 18.8,0 0,1 -9.8,-6.9c-2.4,-3.3 -3.7,-6.4 -3.7,-9.4a46.8,46.8 0,0 1,0.5 -7A35.2,35.2 0,0 1,2.1 2,33 33,0 0,1 7.5,0.5 54.4,54.4 0,0 1,13.4 0Z"/>
    <path
        android:fillColor="#fff"
        android:pathData="M17.8,15.7c1,0.2 5.8,1.5 5.5,2.5a13.5,13.5 0,0 1,-3.5 5.8,22.7 22.7,0 0,1 -6.4,4 22.7,22.7 0,0 1,-6.4 -4,12.9 12.9,0 0,1 -3.5,-5.9c-0.3,-1 4.6,-2.2 5.5,-2.4a33.3,33.3 0,0 1,4.4 -0.4A33.3,33.3 0,0 1,17.8 15.7Z"/>
    <path
        android:fillAlpha="0.24"
        android:fillColor="#FF000000"
        android:pathData="M22.3,4.3a32.3,32.3 0,0 1,1.3 6.5c0.4,4.7 -0.1,6.9 -0.3,7.4a13.5,13.5 0,0 1,-3.5 5.8,22.7 22.7,0 0,1 -6.4,4L13.4,2.7a21.4,21.4 0,0 1,4.5 0.5A25.7,25.7 0,0 1,22.3 4.3Z"
        android:strokeAlpha="0.24"/>
    <path android:pathData="M19.3,0.5a40.5,40.5 0,0 1,5.6 1.5,35.2 35.2,0 0,1 1.6,6.4 46.8,46.8 0,0 1,0.5 7c0,3 -1.2,6.1 -3.7,9.4a20.3,20.3 0,0 1,-9.8 6.9,18.8 18.8,0 0,1 -9.8,-6.9c-2.4,-3.3 -3.7,-6.4 -3.7,-9.4a46.8,46.8 0,0 1,0.5 -7A35.2,35.2 0,0 1,2.1 2,33 33,0 0,1 7.5,0.5 54.4,54.4 0,0 1,13.4 0,54.4 54.4,0 0,1 19.3,0.5Z">
        <aapt:attr name="android:fillColor">
            <gradient
                android:endX="20.4"
                android:endY="1.2154024"
                android:startX="8.4"
                android:startY="20.467602"
                android:type="linear">
                <item
                    android:color="#00FFFFFF"
                    android:offset="0"/>
                <item
                    android:color="#66FFFFFF"
                    android:offset="1"/>
            </gradient>
        </aapt:attr>
    </path>
</vector>

The stacktrace is

        at android.content.res.ResourcesImpl.loadColorStateList(ResourcesImpl.java:1042)
        at android.content.res.Resources.loadColorStateList(Resources.java:1041)
        at android.content.res.TypedArray.getColor(TypedArray.java:469)
        at com.devs.vectorchildfinder.TypedArrayUtils.getNamedColor(TypedArrayUtils.java:54)
        at com.devs.vectorchildfinder.VectorDrawableCompat$VFullPath.updateStateFromTypedArray(VectorDrawableCompat.java:1623)
        at com.devs.vectorchildfinder.VectorDrawableCompat$VFullPath.inflate(VectorDrawableCompat.java:1590)
        at com.devs.vectorchildfinder.VectorDrawableCompat.inflateInternal(VectorDrawableCompat.java:614)
        at com.devs.vectorchildfinder.VectorDrawableCompat.inflate(VectorDrawableCompat.java:498)
        at com.devs.vectorchildfinder.VectorDrawableCompat.createFromXmlInner(VectorDrawableCompat.java:456)
        at com.devs.vectorchildfinder.VectorDrawableCompat.create(VectorDrawableCompat.java:437)

Has anyone got any idea how I can fix this or get around it?

Thanks!

How can we use with Jetpack Compose Image?

@Composable
fun Button(style: ButtonStyle = ButtonStyle()) {
    val colorFilter = style.centerImageTintColorRes.let { ColorFilter.tint(colorRes(id = it)) }
    val imageView = ImageView(LocalContext.current)
    val vector = VectorChildFinder(LocalContext.current, style.centerImageRes, imageView)
    val path1: VectorDrawableCompat.VFullPath = vector.findPathByName("path1")
    path1.fillColor = style.centerImageTintColorRes

    imageView.drawable.toBitmap().asImageBitmap()

      Image(
            painter = painterResource(id = style.centerImageRes),
            colorFilter = colorFilter,
            contentDescription = "", modifier = Modifier.size(54.dp)
        )
}

I can't make it with Jetpack compose unfortunately. Maybe someone else knows a way to make it work?

Sync Failed

Failed to resolve: com.github.devsideal:VectorChildFinder:1.0.0
Show in File
Show in Project Structure dialog

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.