Giter Site home page Giter Site logo

florent37 / shapeofview Goto Github PK

View Code? Open in Web Editor NEW
3.1K 60.0 403.0 13.84 MB

Give a custom shape to any android view, Material Design 2 ready

License: Apache License 2.0

Java 97.75% Shell 0.09% Kotlin 2.15%
android custom view shape mask layout xml material androidx

shapeofview's Introduction

ShapeOfView

CircleCI

Give a custom shape to any android view Useful for Material Design 2

screen screen screen

Android app on Google Play

Breaking change

the old package com.github.florent37 has been replaced by io.github.florent37

Download

Buy Me a Coffee at ko-fi.com

Download

//using maven central

dependencies {
    implementation 'io.github.florent37:shapeofview:1.4.7'
}

Sample

What you can do with Shape Of View :

screen

Use implemented shapes

ShapeOfView disable the background property of your view, please specify a child with a background to enable it

<io.github.florent37.shapeofview.shapes.CircleView
   <FrameLayout
      android:background="@color/blue"

ShapeOfView came with pre-created shapes :

Circle

screen

<io.github.florent37.shapeofview.shapes.CircleView
        android:layout_width="150dp"
        android:layout_height="150dp"

        android:elevation="4dp"
        app:shape_circle_borderColor="@android:color/black"
        app:shape_circle_borderWidth="2dp">

            <!-- YOUR CONTENT -->

</io.github.florent37.shapeofview.shapes.CircleView>

RoundRect

screen

<io.github.florent37.shapeofview.shapes.RoundRectView
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:elevation="4dp"
        app:shape_roundRect_bottomLeftRadius="10dp"
        app:shape_roundRect_bottomRightRadius="10dp"
        app:shape_roundRect_topLeftRadius="10dp"
        app:shape_roundRect_topRightRadius="10dp"
        
        app:shape_roundRect_borderColor="@android:color/black"
        app:shape_roundRect_borderWidth="2dp"
        >


            <!-- YOUR CONTENT -->

</io.github.florent37.shapeofview.shapes.RoundRectView>

ClipCorner

screen

<io.github.florent37.shapeofview.shapes.CutCornerView
        android:id="@+id/clipCorner"
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:elevation="4dp"
        app:shape_cutCorner_bottomRightSize="20dp">

         <!-- YOUR CONTENT -->

</io.github.florent37.shapeofview.shapes.CutCornerView>

Arc

screen

<io.github.florent37.shapeofview.shapes.ArcView
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:elevation="4dp"
        app:shape_arc_cropDirection="outside"
        app:shape_arc_height="20dp"
        app:shape_arc_position="bottom"
        >

         <!-- YOUR CONTENT -->

</io.github.florent37.shapeofview.shapes.ArcView>

Diagonal

screen

<io.github.florent37.shapeofview.shapes.DiagonalView
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:elevation="4dp"
        app:shape_diagonal_angle="10"
        app:shape_diagonal_direction="right" 
        app:shape_diagonal_position="bottom">

         <!-- YOUR CONTENT -->

</io.github.florent37.shapeofview.shapes.DiagonalView>

Triangle

screen

<io.github.florent37.shapeofview.shapes.TriangleView
         android:layout_width="150dp"
         android:layout_height="150dp"
         android:elevation="4dp"

         app:shape_triangle_percentBottom="0.5"
         app:shape_triangle_percentLeft="0"
         app:shape_triangle_percentRight="0">

            <!-- YOUR CONTENT -->

</io.github.florent37.shapeofview.shapes.TriangleView>

Bubble

screen

<io.github.florent37.shapeofview.shapes.BubbleView
        android:layout_width="150dp"
        android:layout_height="150dp"
        app:shape_bubble_arrowHeight="10dp"
        app:shape_bubble_arrowWidth="10dp"
        app:shape_bubble_arrowPosition="bottom"
        app:shape_bubble_borderRadius="20dp"
        app:arrow_posititon_percent="0.5"
        >

         <!-- YOUR CONTENT -->

</io.github.florent37.shapeofview.shapes.BubbleView>

Star

screen screen

<io.github.florent37.shapeofview.shapes.StarView
        android:layout_width="150dp"
        android:layout_height="150dp"
        app:shape_star_noOfPoints="5">

         <!-- YOUR CONTENT -->

</io.github.florent37.shapeofview.shapes.StarView>

Polygon

screen

 <io.github.florent37.shapeofview.shapes.PolygonView
            android:layout_width="150dp"
            android:layout_height="100dp"
            app:shape_polygon_noOfSides="9"
            >
         <!-- YOUR CONTENT -->

</io.github.florent37.shapeofview.shapes.PolygonView>

Dotted Edges with Cut Corners

screen

 <io.github.florent37.shapeofview.shapes.DottedEdgesCutCornerView
             android:layout_width="100dp"
             android:layout_height="match_parent"
             app:shape_dot_radius="3dp"
             app:shape_dot_spacing="2dp"
             app:shape_edge_position="right|left"
             app:shape_dottedEdgesCutCorner_bottomLeftSize="8dp"
             app:shape_dottedEdgesCutCorner_bottomRightSize="8dp"
             >

             <!-- YOUR CONTENT -->

 </io.github.florent37.shapeofview.shapes.DottedEdgesCutCornerView>

Animation

All shapes methods can be animated

For example, you can animate a RoundRect corner :

anim

ValueAnimator.ofFloat(0f, 200f, 0f).apply {
     addUpdateListener { animation -> roundRect.bottomLeftRadius = (animation.animatedValue as Float).toInt() }
     duration = 800
     repeatCount = ValueAnimator.INFINITE
     repeatMode = ValueAnimator.REVERSE
}.start()

Create you own shape

You can use custom shape to cut your view

Using Drawable (no elevation)

screen

<io.github.florent37.shapeofview.ShapeOfView
        android:layout_width="100dp"
        android:layout_height="100dp"

        app:shape_clip_drawable="@drawable/YOUR_DRAWABLE"
        >

    <!-- YOUR CONTENT -->

 </io.github.florent37.shapeofview.ShapeOfView>

Using Path (with elevation)

This method generates also a shadow path (with Lollipop elevation API 21+)

Wrap your view with a ShapeOfView

<io.github.florent37.shapeofview.ShapeOfView
        android:id="@+id/myShape"
        android:layout_width="30dp"
        android:layout_height="15dp"
        android:elevation="6dp">

        <!-- YOUR CONTENT -->

 </io.github.florent37.shapeofview.ShapeOfView>

Then generate a path in your code :

ShapeOfView shapeOfView = findViewById(R.id.myShape)
shapeOfView.setClipPathCreator(new ClipPathManager.ClipPathCreator() {
       @Override
       public Path createClipPath(int width, int height) {
           final Path path = new Path();

            //eg: triangle
           path.moveTo(0, 0);
           path.lineTo(0.5 * width, height);
           path.lineTo(width, 0);
           path.close();

           return path;
       }
});

In some case you have to specify requiresBitmap = true to enable ShapeOfView to draw the shape inside a bitmap before clipping your view. It will be less efficient but can make your custom shape work.

Contribute

Feel free to fork this project, and add customs shapes

Then make a merge-request after updated the README with a sample of your shape, including a preview

TODO

HISTORY

1.4.5 Removed DiagonalView's Direction : if diagonalAngle > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT

1.4.5 Removed ArcView's ArcDirection : CROP_OUTSIDE if arcHeight > 0, CROP_INSIDE if arcHeight < 0

1.4.1 Added Dotted Edge, thanks to @khunzohn

1.4.0 Support AndroidX

1.3.2 Backport of 1.3.0 for api 14+

1.3.0 Fixed rendering on android API 28+

1.2.0 Removed bitmap usage in a lot of usecases (diagonal, arc, roundrect, circle)

1.1.0 Disabled setBackground on ShapeOfView

1.0.9 Added requiresShapeUpdate(), allowing animations to work, look at AnimationActivity

1.0.8 Used arcTo instead of quads in RoundRect, added border to RoundRect

1.0.7 Prefixed all attributes by shape_

1.0.6 Updated roundrect implementation

1.0.5 Enable hardware acceleration after clip view

1.0.4 Added PolygonView

1.0.2 Added StarView

1.0.1 Added BubbleView

Credits

Ed Sheeran, for the name of this project and his awesome songs <3

Author: Florent Champigny

Blog : http://www.tutos-android-france.com/

Fiches Plateau Moto : https://www.fiches-plateau-moto.fr/

Android app on Google Play Follow me on Google+ Follow me on Twitter Follow me on LinkedIn

License

Copyright 2017 Florent37, Inc.

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.

shapeofview's People

Contributors

akhunzaada avatar chickinnick avatar drrey avatar florent37 avatar iamanbansal avatar khunzohn avatar knightcube avatar paolorotolo avatar sadeghpro 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  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

shapeofview's Issues

Ripple effect problem

Hello,
Thanks for great library, i want to ask you a question,
How can i add ripple effect to DiagonalView.

Thanks.

MapView inside ShapeOfView.

Hi, thanks for the great library. Tried to put Mapbox MapView inside ShapeView and it doesn't work. Map doesn't appear with disabled hardware acceleration. And if I turn it on clipping logic stops working. Could you please explain such behavior? Is there any way to make the map works inside ShapeLayout? Thanks.

High API level required in version 1.3

I'm using version 1.2.0 right now and today im upgraded the library to version 1.3.0 and I get error about min sdk version of my app (17) because new version requires API level 19, any help?

Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed plz..help me to resolved this error. i'm using android studio 3.2.1 with sdk 28

java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed
at android.graphics.Canvas.checkValidClipOp(Canvas.java:779)
at android.graphics.Canvas.clipRect(Canvas.java:826)
at android.view.ViewGroup_Delegate.drawShadow(ViewGroup_Delegate.java:86)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:58)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.support.constraint.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1963)
at android.view.View.draw_Original(View.java:20075)
at android.view.View_Delegate.draw(View_Delegate.java:68)
at android.view.View.draw(View.java:19849)
at android.view.ViewGroup.drawChild_Original(ViewGroup.java:4333)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:63)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.draw_Original(View.java:20075)
at android.view.View_Delegate.draw(View_Delegate.java:68)
at android.view.View.draw(View.java:19849)
at android.view.ViewGroup.drawChild_Original(ViewGroup.java:4333)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:63)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.draw_Original(View.java:20075)
at android.view.View_Delegate.draw(View_Delegate.java:68)
at android.view.View.draw(View.java:19849)
at android.view.ViewGroup.drawChild_Original(ViewGroup.java:4333)
at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:63)
at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
at android.view.View.draw_Original(View.java:20210)
at android.view.View_Delegate.draw(View_Delegate.java:56)
at android.view.View.draw(View.java:20177)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.renderAndBuildResult(RenderSessionImpl.java:405)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.renderAndBuildResult(RenderSessionImpl.java:552)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.render(RenderSessionImpl.java:426)
at com.android.layoutlib.bridge.BridgeRenderSession.render(BridgeRenderSession.java:108)
at com.android.ide.common.rendering.api.RenderSession.render(RenderSession.java:154)
at com.android.ide.common.rendering.api.RenderSession.render(RenderSession.java:136)
at com.android.tools.idea.rendering.RenderTask.lambda$renderInner$5(RenderTask.java:671)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

BubbleView needs setter

Hi.
BubbleView lack setter for arrow height and weight.

    public void setArrowHeightPx(int arrowHeightPx)
    {
        this.arrowHeightPx = arrowHeightPx;
    }

    public void setArrowWidthPx(int arrowWidthPx)
    {
        this.arrowWidthPx = arrowWidthPx;
    }

The parent ViewGroup setLayerType(View.LAYER_TYPE_SOFTWARE ,null)

The parent ViewGroup setLayerType(View.LAYER_TYPE_SOFTWARE ,null) include RoundRectView round corner not working below Android P.

    <FrameLayout
            android:id="@+id/fl_container_2"
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:layout_marginTop="30dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/tv_border">

            <com.github.florent37.shapeofview.shapes.RoundRectView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:shape_roundRect_topLeftRadius="10dp">
                
                <View
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@color/colorPrimaryDark" />
            </com.github.florent37.shapeofview.shapes.RoundRectView>

     </FrameLayout>
        val container2=findViewById<FrameLayout>(R.id.fl_container_2).apply { 
            setLayerType(LAYER_TYPE_SOFTWARE,null)
        }

RoundRectView There is a problem with the rounded corners

RoundRectView:
screenshot_20180425-114857
XmlRadius:
screenshot_20180425-114738
It seems that RoundRectView does not support full circle angle.

//RoundRectView info
<com.github.florent37.shapeofview.shapes.RoundRectView
android:layout_width="92dp"
android:layout_height="28dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
ro:shape_roundRect_bottomLeftRadius="14dp"
ro:shape_roundRect_bottomRightRadius="14dp"
ro:shape_roundRect_topLeftRadius="14dp"
ro:shape_roundRect_topRightRadius="14dp">

//Shape Xml info
qq 20180425115741

RoundRectView will display an error after adding a shadow

@florent37 RoundRectView will display an error after adding a shadow.

        <com.github.florent37.shapeofview.shapes.RoundRectView
            android:id="@+id/compose_message_container"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_marginStart="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginBottom="12dp"
            android:elevation="1dp"
            app:shape_roundRect_bottomLeftRadius="24dp"
            app:shape_roundRect_bottomRightRadius="24dp"
            app:shape_roundRect_topLeftRadius="24dp"
            app:shape_roundRect_topRightRadius="24dp"
            app:shape_roundRect_borderColor="@color/red"
            app:shape_roundRect_borderWidth="2dp">

image

Example Screens

Hi would be very nice if you could add the 2 animated example screens with rough one and the other
to get a clue how to get this to work

greets frank

Set border for TriangleView

I am using triangleView :

          <com.github.florent37.shapeofview.shapes.TriangleView
            android:id="@+id/triangle"
            android:layout_width="30dp"
            android:layout_height="13dp"
            android:layout_above="@+id/tab_layout"
            android:rotation="180">

            <View
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/colorPrimary" />

        </com.github.florent37.shapeofview.shapes.TriangleView>

        <com.sample.android.contact.widget.ListenableTabLayout
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_alignParentBottom="true"
            android:background="@color/colorPrimary"
            app:tabIndicatorHeight="2dp"
            app:tabSelectedTextColor="@color/colorAccent"
            app:tabTextColor="@android:color/white" />

I want to create border for my TriangleView as well as top of my ListenableTabLayout with grey color. How can I make it?

sample crash ClassNotFoundException: Didn't find class "androidx.constraintlayout.ConstraintLayout

Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.constraintlayout.ConstraintLayout" on path: DexPathList[[zip file "/data/app/com.github.florent37.shapeofview-2/base.apk"],nativeLibraryDirectories=[/data/app/com.github.florent37.shapeofview-2/lib/arm, /data/app/com.github.florent37.shapeofview-2/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]

FloatingActionbar has same Exception

Diagonal View angle type

Hi,

Is there any reason why the diagonal angle is an integer rather than a float in the Diagonal View? I'm trying to animate the change of angle and because it's only supports integers the animation looks a bit jumpy.

Another elevation issue

If children of any ShapeOfView view in layout have an elevation set, their shadow does not render at all. So android:elevation has no effect

Elevation not working

The elevation on any of the view is not working. no matter if height/wifth is set to wrap_content or match_parent or a specific size. It just shows small box of shadow on top left of the view when trying to set elevation.

Here is the image as shown in android studio preview.

error

The elevation shadow is completely invisible when run on device.

Elevation issue

I tried this path and elevation is gone.

`shapeOfView.setClipPathCreator { width, height ->
val path = Path()

        path.moveTo(0f, 0f)
        path.lineTo(width.toFloat(), 0f)
        path.lineTo((width - 0.1f * width), 0.5f*height)
        path.lineTo(width.toFloat(), height.toFloat())
        path.lineTo(0f, height.toFloat())
        path.close()

        path
    }`

java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed

on android pie there is a render problem that appears when i try to use
android:elevation.

java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed   at android.graphics.Canvas.checkValidClipOp(Canvas.java:779)   at android.graphics.Canvas.clipRect(Canvas.java:826)   at android.view.ViewGroup_Delegate.drawShadow(ViewGroup_Delegate.java:86)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:58)   at android.view.ViewGroup.drawChild(ViewGroup.java:4333)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)   at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:2070)   at android.view.View.draw_Original(View.java:20075)   at android.view.View_Delegate.draw(View_Delegate.java:68)   at android.view.View.draw(View.java:19849)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:4333)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:63)   at android.view.ViewGroup.drawChild(ViewGroup.java:4333)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)   at android.view.View.draw_Original(View.java:20075)   at android.view.View_Delegate.draw(View_Delegate.java:68)   at android.view.View.draw(View.java:19849)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:4333)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:63)   at android.view.ViewGroup.drawChild(ViewGroup.java:4333)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)   at android.view.View.draw_Original(View.java:20075)   at android.view.View_Delegate.draw(View_Delegate.java:68)   at android.view.View.draw(View.java:19849)   at android.view.ViewGroup.drawChild_Original(ViewGroup.java:4333)   at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:63)   at android.view.ViewGroup.drawChild(ViewGroup.java:4333)   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)   at android.view.View.draw_Original(View.java:20210)   at android.view.View_Delegate.draw(View_Delegate.java:56)   at android.view.View.draw(View.java:20177) Copy stack to clipboard

Fatal Exception: java.lang.OutOfMemoryError

In the application development process I have this error:

at android.graphics.Bitmap.nativeCreate(Bitmap.java)
at android.graphics.Bitmap.createBitmap(Bitmap.java:810)
at android.graphics.Bitmap.createBitmap(Bitmap.java:787)
at android.graphics.Bitmap.createBitmap(Bitmap.java:754)
at com.github.florent37.shapeofview.manager.ClipPathManager.setClipPathCreator(Unknown Source)
at com.github.florent37.shapeofview.ShapeOfView.init(Unknown Source)
at com.github.florent37.shapeofview.ShapeOfView.onLayout(Unknown Source)

how can I solve it
Thank you

OutOfMemoryError

Using ShapeOfView in ViewPager with FragmentStatePageAdapter return :
Failed to allocate a 1324812 byte allocation with 721200 free bytes and 704KB until OOM.
Lines:
.ShapeOfView.calculateLayout (ShapeOfView.java:147)
.ShapeOfView.dispatchDraw (ShapeOfView.java:114)

When requiresBitmap= true;

Button elevation + animation elevation lost in DiagonalView

When I try to put a <Button> in the <DiagonalView> this one lost his elevation and on press elevation animation

<com.github.florent37.shapeofview.shapes.DiagonalView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:shape_diagonal_angle="10"
            app:shape_diagonal_position="bottom">

    <LinearLayout
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:background="@color/colorAccent"
                  android:orientation="vertical">

        <Button
                android:layout_width="match_parent"
                android:layout_height="@dimen/button_regular_height"
                android:layout_gravity="center"
                android:layout_marginStart="@dimen/button_regular_margin_start"
                android:layout_marginTop="@dimen/margin_regular_x2"
                android:layout_marginEnd="@dimen/button_regular_margin_end"
                android:layout_marginBottom="@dimen/margin_regular_x2"
                android:background="@drawable/button_white"
                android:ellipsize="end"
                android:enabled="false"
                android:maxLines="1"
                android:textAppearance="@style/DarwinBoldButton"
                android:textColor="@color/brightGray" />

    </LinearLayout>

</com.github.florent37.shapeofview.shapes.DiagonalView>

If I move the whole <LinearLayout><Button> out of <DiagonalView>, it's working correctly.

Any idea?

PS:
Here is my custom button background

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:color="#33000000"
    tools:targetApi="lollipop">
    <item
        android:id="@android:id/mask"
        android:gravity="center">
        <shape>
            <solid android:color="@color/white" />
            <corners android:radius="@dimen/corner_radius_regular" />

        </shape>
    </item>
    <item android:id="@android:id/background">
        <shape>
            <solid android:color="@color/white" />
            <corners android:radius="@dimen/corner_radius_regular" />

        </shape>
    </item>
</ripple>

Can I use SurfaceView inside ShapeOfView

I wanted to show camera preview in a circle view, so I tried to put a SurfaceView inside CircleView. But the SurfaceView seemed to be covered by CircleView and showed nothing. If I change the CircleView to FrameLayout, SurfaceView can show camera preview in a rect. Can you give me some advice to solve this ?Thank you.

<com.github.florent37.shapeofview.shapes.CircleView
        android:layout_width="200dp"
        android:layout_height="200dp">
        <SurfaceView
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
</com.github.florent37.shapeofview.shapes.CircleView>

No server to serve request. Check logs for details.

when i open this project in android studio i am getting error
please tell me how to fix this

No server to serve request. Check logs for details.

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:mergeDebugResources'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.android.build.gradle.tasks.ResourceException: Error: java.util.concurrent.ExecutionException: java.lang.RuntimeException: No server to serve request. Check logs for details.
at com.android.build.gradle.tasks.MergeResources.doFullTaskAction(MergeResources.java:296)
at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
... 32 more
Caused by: Error: java.util.concurrent.ExecutionException: java.lang.RuntimeException: No server to serve request. Check logs for details.
at com.android.ide.common.res2.MergedResourceWriter.postWriteAction(MergedResourceWriter.java:628)
at com.android.ide.common.res2.MergeWriter.end(MergeWriter.java:46)
at com.android.ide.common.res2.MergedResourceWriter.end(MergedResourceWriter.java:238)
at com.android.ide.common.res2.DataMerger.mergeData(DataMerger.java:301)
at com.android.ide.common.res2.ResourceMerger.mergeData(ResourceMerger.java:412)
at com.android.build.gradle.tasks.MergeResources.doFullTaskAction(MergeResources.java:285)
... 48 more
Suppressed: java.lang.RuntimeException: No slave process to process jobs, aborting
at com.android.builder.tasks.WorkQueue.shutdown(WorkQueue.java:199)
at com.android.builder.internal.aapt.QueuedResourceProcessor.end(QueuedResourceProcessor.java:147)
at com.android.builder.internal.aapt.v2.QueueableAapt2.close(QueueableAapt2.java:104)
at com.android.build.gradle.tasks.MergeResources.doFullTaskAction(MergeResources.java:293)
... 48 more
Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: No server to serve request. Check logs for details.
at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503)
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:482)
at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79)
at com.android.ide.common.res2.MergedResourceWriter.postWriteAction(MergedResourceWriter.java:599)
... 53 more
Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: No server to serve request. Check logs for details.
at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503)
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:462)
at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79)
at com.android.builder.internal.aapt.v2.QueueableAapt2.lambda$compile$0(QueueableAapt2.java:136)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
... 1 more
Caused by: java.lang.RuntimeException: No server to serve request. Check logs for details.
at com.android.builder.tasks.WorkQueue.checkFailedServers(WorkQueue.java:320)
at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:263)
... 1 more

Dynamically Resizing

I've attempted to resize the view after it was initally set using .setClipPathCreator(Path path), however it only seems to resize the view when an EditText is pressed and pops up the keyboard. Does anybody know how to force the views to resize? Tried .forceLayout(), .invalidate(), and requestLayout() to no avail.

requiresBitmap?

my view is rare when it requiresBitmap = false, but is this parameter really needed or am I doing something wrong?
CutoutTicketView
screenshot_20180911-183501

When requiresBitmap= true works fine.
screenshot_20180911-183956

Layout:
`
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">

<com.vipulasri.ticketview.TicketView
    android:id="@+id/ticketView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:scallopRadius="10dp"
    app:scallopPositionPercent="45"
    app:cornerType="rounded"
    app:ticketElevation="6dp"
    app:orientation="horizontal" />

<android.support.constraint.Guideline
    android:id="@+id/guideline"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_percent="0.45" />

<app.pasaporte.ui.widget.CutoutTicketView
    android:id="@+id/frameLayout"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toTopOf="@+id/guideline"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <ImageView
        android:id="@+id/backdrop"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        tools:ignore="ContentDescription"
        tools:src="@drawable/splash_bg_img" />

    <View
        android:id="@+id/scrim"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/immersive_bars" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <TextView
            android:id="@+id/description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/open_sans_semibold"
            android:textColor="@android:color/white"
            android:textSize="22sp"
            tools:text="Paseo a Matacanes " />

        <TextView
            android:id="@+id/date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/open_sans"
            android:textColor="@android:color/white"
            android:textSize="18sp"
            tools:text="25 de julio de 2018" />

        <Button
            android:id="@+id/see_detail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/padding_normal"
            android:background="@drawable/button_default"
            android:fontFamily="@font/open_sans"
            android:minHeight="?attr/actionBarSize"
            android:minWidth="190dp"
            android:text="@string/see_detail"
            android:textAllCaps="false"
            android:textColor="@android:color/white"
            android:textSize="16sp" />

    </LinearLayout>

    <ImageButton
        android:id="@+id/share"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_gravity="top|end"
        android:background="?attr/selectableItemBackgroundBorderless"
        android:src="@drawable/share_icon"
        tools:ignore="ContentDescription" />

</app.pasaporte.ui.widget.CutoutTicketView>

<ImageView
    android:id="@+id/qr_view"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:scaleType="centerCrop"
    app:layout_constraintBottom_toTopOf="@id/qr_code"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/guideline"
    tools:ignore="ContentDescription"
    tools:src="@drawable/ic_qr_code" />

<TextView
    android:id="@+id/qr_code"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="@dimen/spacing_normal"
    android:fontFamily="@font/open_sans_light"
    android:textSize="16sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/qr_view"
    tools:text="400&#8211;2000&#8211;2020" />

</android.support.constraint.ConstraintLayout>`

Crash on use different ShapeOfView nested

Crash without any use of the widget or view.

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.github.florent37.shapeofview.shapes.RoundRectView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        app:shape_roundRect_bottomLeftRadius="15dp"
        app:shape_roundRect_bottomRightRadius="15dp"
        app:shape_roundRect_topLeftRadius="15dp"
        app:shape_roundRect_topRightRadius="15dp">

        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/deep_dark_blue">


            <com.github.florent37.shapeofview.shapes.DiagonalView
                android:id="@+id/diagonal_view"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                app:layout_constraintEnd_toStartOf="@id/guideline_50"
                app:layout_constraintStart_toStartOf="parent"
                app:shape_diagonal_angle="30"
                app:shape_diagonal_direction="right"
                app:shape_diagonal_position="right">

                <ImageView
                    android:id="@+id/img_flyer_list"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:scaleType="centerCrop"
                    tools:src="@drawable/club_event_flyer_djoon" />
            </com.github.florent37.shapeofview.shapes.DiagonalView>

            <TextView
                android:id="@+id/tv_cell_title"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="12dp"
                android:layout_marginTop="4dp"
                android:gravity="start"
                android:singleLine="true"
                android:textAlignment="gravity"
                android:textColor="@color/white"
                android:textSize="18sp"
                android:textStyle="bold"
                app:layout_constraintStart_toEndOf="@id/guideline_35"
                app:layout_constraintTop_toTopOf="parent"
                tools:text="Titre Event" />

            <TextView
                android:id="@+id/tv_cell_description"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="8dp"
                android:ellipsize="marquee"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:gravity="center"
                android:marqueeRepeatLimit="marquee_forever"
                android:scrollHorizontally="true"
                android:singleLine="true"
                android:textColor="@color/white"
                app:layout_constraintEnd_toStartOf="@id/guideline_90"
                app:layout_constraintStart_toEndOf="@id/guideline_45"
                app:layout_constraintTop_toBottomOf="@+id/tv_cell_title"
                tools:text="DescriptionDescriptionDescriptionDescription" />

            <TextView
                android:id="@+id/tv_rotate"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:text="Generaliste"
                android:textColor="@color/white"/>

            <android.support.constraint.Guideline
                android:id="@+id/guideline_45"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                app:layout_constraintGuide_percent="0.45" />

            <android.support.constraint.Guideline
                android:id="@+id/guideline_35"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                app:layout_constraintGuide_percent="0.35" />

            <android.support.constraint.Guideline
                android:id="@+id/guideline_50"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                app:layout_constraintGuide_percent="0.5" />

            <android.support.constraint.Guideline
                android:id="@+id/guideline_90"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                app:layout_constraintGuide_percent="0.90" />


        </android.support.constraint.ConstraintLayout>
    </com.github.florent37.shapeofview.shapes.RoundRectView>
</android.support.constraint.ConstraintLayout>`


 `05-30 02:16:55.005 21700-21700/com.itexus.kraze E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.itexus.kraze, PID: 21700
    java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@2945586
        at android.graphics.BaseCanvas.throwIfCannotDraw(BaseCanvas.java:62)
        at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:226)
        at android.view.RecordingCanvas.drawBitmap(RecordingCanvas.java:79)
        at com.github.florent37.shapeofview.ShapeOfView.dispatchDraw(ShapeOfView.java:121)
        at android.view.View.draw(View.java:20208)
        at android.view.View.updateDisplayListIfDirty(View.java:19080)
        at android.view.View.draw(View.java:19933)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.support.constraint.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1963)
        at android.view.View.draw(View.java:20208)
        at android.view.View.updateDisplayListIfDirty(View.java:19080)
        at android.view.View.draw(View.java:19933)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at com.github.florent37.shapeofview.ShapeOfView.dispatchDraw(ShapeOfView.java:115)
        at com.github.florent37.shapeofview.shapes.RoundRectView.dispatchDraw(RoundRectView.java:96)
        at android.view.View.draw(View.java:20208)
        at android.view.View.updateDisplayListIfDirty(View.java:19080)
        at android.view.View.draw(View.java:19933)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.support.constraint.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1963)
        at android.view.View.updateDisplayListIfDirty(View.java:19071)
        at android.view.View.draw(View.java:19933)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.support.v7.widget.RecyclerView.drawChild(RecyclerView.java:4703)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.view.View.draw(View.java:20208)
        at android.support.v7.widget.RecyclerView.draw(RecyclerView.java:4107)
        at android.view.View.updateDisplayListIfDirty(View.java:19080)
        at android.view.View.draw(View.java:19933)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.support.constraint.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1963)
        at android.view.View.draw(View.java:20208)
        at android.view.View.updateDisplayListIfDirty(View.java:19080)
        at android.view.View.draw(View.java:19933)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.view.View.updateDisplayListIfDirty(View.java:19071)
        at android.view.View.draw(View.java:19933)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.view.View.updateDisplayListIfDirty(View.java:19071)
        at android.view.View.draw(View.java:19933)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.view.View.updateDisplayListIfDirty(View.java:19071)
        at android.view.View.draw(View.java:19933)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.view.View.updateDisplayListIfDirty(View.java:19071)
        at android.view.View.draw(View.java:19933)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.view.View.updateDisplayListIfDirty(View.java:19071)
        at android.view.View.draw(View.java:19933)
        at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
        at android.view.View.draw(View.java:20208)
        at com.android.internal.policy.DecorView.draw(DecorView.java:784)
        at android.view.View.updateDisplayListIfDirty(View.java:19080)
05-30 02:16:55.009 21700-21700/com.itexus.kraze E/AndroidRuntime:     at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:685)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:691)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:799)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:3259)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3075)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2455)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1443)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7125)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:935)
        at android.view.Choreographer.doCallbacks(Choreographer.java:747)
        at android.view.Choreographer.doFrame(Choreographer.java:682)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:921)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6649)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826)```

unbound prefix.

Caused by: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource compilation failed
app/src/main/res/layout/row_category_img.xml:2

<com.github.florent37.shapeofview.shapes.DiagonalView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:elevation="4dp"
app:shape_diagonal_angle="10"
app:shape_diagonal_position="bottom"
android:layout_height="wrap_content">

<LinearLayout
    android:id="@+id/ll_main"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="vertical">

    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </FrameLayout>
</LinearLayout>

</com.github.florent37.shapeofview.shapes.DiagonalView>

library not working with compileSdkVersion 28

I get a Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex everytime i try to run my project with the latest implementation 'com.github.florent37:shapeofview:1.4.2'.. Running with stacktrace shows me this error :
Error:com.android.dex.DexException: Multiple dex files define Landroid/support/v4/os/ResultReceiver;
I've tried deleting the .gradle/caches folder.. invalidate caches and restart.. clean & rebuild project but i'm still unable to get this library working with compilesdkversion 28.. compilesdkversion 27 gives me fontvariationsettings ttcindex not found error as well.. i've included multiDexEnabled true and also implementation 'com.android.support:multidex:1.0.3' in my gradle

mask can be seen on android 4.4.2

using the arc i get a black mask showing on the left and right (where the arc is) of the view this is only showing up on android 4.4.2
have tried changing the order of the views inside and outside the view group to no avail

elevation

Please let us know how i can remove elevation from half circle

Border for round view?

Hi, i usually use custom round view in my app. Can you support RoundView with borderWidth and borderColor like CircleView?
Thanks

ArcView Border

Is it possible to set a border when using an ArcView?

version 1.4.6 is getting Gradle failed to build

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 is also present at [androidx.core:core:1.0.1] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory). Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:10:5-25:19 to override.

RoundRectView not displayed

I everyone I've got a little bug when using multiple RoundRectView inside a scrollView.
My layout is something like this

<LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/colorTransparent"
                android:orientation="vertical">

                <include layout="@layout/layout_1" />
                <include layout="@layout/layout_2" />
                <include layout="@layout/layout_3" />
                <include layout="@layout/layout_4" />
</LinearLayout>

Every layout is like this

<com.github.florent37.shapeofview.shapes.RoundRectView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    style="@style/AppTheme.CardDettaglioCasting"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

    <!--Some Stuff-->
        
    </LinearLayout>

</com.github.florent37.shapeofview.shapes.RoundRectView>

and this is the @style/AppTheme.CardDettaglioCasting

<style name="AppTheme.CardDettaglioCasting">
            <item name="android:elevation">4dp</item>
            <item name="android:layout_marginEnd">16dp</item>
            <item name="android:layout_marginLeft">16dp</item>
            <item name="android:layout_marginRight">16dp</item>
            <item name="android:layout_marginStart">16dp</item>
            <item name="android:layout_marginTop">24dp</item>
            <item name="shape_roundRect_bottomLeftRadius">16dp</item>
            <item name="shape_roundRect_bottomRightRadius">16dp</item>
            <item name="shape_roundRect_topLeftRadius">16dp</item>
            <item name="shape_roundRect_topRightRadius">16dp</item>
            <item name="android:background">@drawable/background_card_casting</item>
</style>

Inside layouts there're some relativelayout, linear layout, images, textview and all of them are layout_height="wrap_content". In particular in the last layout there is a RecycleView with about 10 rows. If I include the last layout (the one with the recycleview) I don't see that layout and the Logcat gives me

RoundRectView not displayed because it is too large to fit into a software layer (or drawing cache), needs 11166432 bytes, only 8294400 available

I'm trying to display some much stuff and I ran in some performance issue?

Thanks for your help

Issues values-v28.xml

mergeDebugResources\merged.dir\values-v28\values-v28.xml:7: error: resource android:attr/dialogCornerRadius not found.
mergeDebugResources\merged.dir\values-v28\values-v28.xml:11: error: resource android:attr/dialogCornerRadius not found.
mergeDebugResources\merged.dir\values\values.xml:3673: error: resource android:attr/fontVariationSettings not found.
mergeDebugResources\merged.dir\values\values.xml:3673: error: resource android:attr/ttcIndex not found.

Big Drawing Bug

Unfortunately when you try to create a Bitmap from the View it wont show the correct View.

How it looks when added as a view:
screenshot_20180803-174721

How it looks when taking a bitmap from this view:
screenshot_20180803-174735

The method you use to create the bitmap is totally arbitrary:

DisplayMetrics dm = getResources().getDisplayMetrics(); v.measure(View.MeasureSpec.makeMeasureSpec(dm.widthPixels, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(dm.heightPixels, View.MeasureSpec.EXACTLY)); v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); Bitmap returnedBitmap = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888); Canvas c = new Canvas(returnedBitmap); v.draw(c);

or something like:
setDrawingCacheEnabled(true); buildDrawingCache(); getDrawingCache();

It really doesn't depend on the way you use to create the screenshot.

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.