SimplePaperView
Presentation
This is the source code of an Android library: -=:[ SimplePaperView ]:=-
Simple View to draw lines, circles or text labels
Why would you need it?
Have you ever tried to build your own, simple, custom view?
Saying "it's a pain in the neck" is an euphemism!
If you just need to draw a graph with some lines, basic shapes and labels all around... SimplePaperView takes care of anything:
- draws on canvas
- applies proper translations
- handles onMeasure() method
- gives you the choice to invert the Y axis (like in classical cartesian system)
- considers padding, both programmatically and via layout
In this way you can put your effort on what you really care: create lines, circles, labels and beautify your view!
How to use it?
Step 1. add the JitPack repository to your ROOT build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. add the dependency:
implementation 'com.github.lukelorusso:SimplePaperView:1.1.6'
That's it!
Now you can add the view to your layout:
<com.lukelorusso.simplepaperview.SimplePaperView
android:id="@+id/mainSimplePaperView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
maybe add some padding or background color:
...
android:background="@color/paperBackground"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingStart="10dp"
android:paddingEnd="10dp"
...
Let's move to the code!
If you want to invert Y axis just:
mySimplePaperView.invertY = true
to create a lines:
val line = SimplePaperView.Line(
200F, // starting x position
200F, // starting y position
400F, // destination x position
0F, // destination y position
Color.GREEN, // the color
8F // the weight of this line
)
Dimensions may be in pixels or dp: you choose!
For a circle:
val circle = SimplePaperView.Circle(
110F, // x position
100F, // y position
25F, // radius position
Color.BLUE // the color
)
Let's create a text label:
val label = SimplePaperView.TextLabel(
"your text",
18F, // text size
110F, // x position
50F, // y position
ContextCompat.getColor(this, R.color.textLabel), // text color
false, // if you want to center the text horizontally on the x point, set it true!
ResourcesCompat.getFont(this, R.font.roboto_italic) // optionally a custom font
)
Now that you have all your items, you can draw one of them:
mySimplePaperView.drawInDp(line)
or
mySimplePaperView.drawInPx(line)
If you need to add multiple items and draw them together at the end, you can:
mySimplePaperView.drawInDp(circle, false) // we invoke the choice to NOT invalidate the view -> false
mySimplePaperView.drawInDp(label, true) // now we want to invalidate (redraw) the view -> true
Anyway, to simplify your life you may want to:
mySimplePaperView.drawInDp( // or in px :)
listOf(line, circle, label)
)
Do you need a listener when your objects are all drawn?
mainSimplePaperView.setOnDrawListener { Log.d("SimplePaperView", "all drawn!") }
Don't you like your drawing? Just clear the paper:
mySimplePaperView.clearPaper()
More shapes coming soon! 😎
Explore!
Feel free to checkout and launch the example app 🎡
Real life applications
Copyright
Make with 💚 by Luca Lorusso, licensed under Apache License 2.0