diff --git a/.gitignore b/.gitignore
index 56624dc..ac1871a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,5 +12,4 @@
/captures
.externalNativeBuild
.cxx
-gradle.properties
gradlew.bat
diff --git a/README.md b/README.md
index 6f371e6..7cf81dd 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,7 @@ allprojects {
Add the dependency
```
dependencies {
- implementation 'com.github.bardss:PaintableVectorView:1.0.0'
+ implementation 'com.github.bardss:PaintableVectorView:1.0.4'
}
```
@@ -40,18 +40,39 @@ val paintableView = PaintableVectorView(
layout.addView(paintableView)
```
+Or add in xml and set attributes:
+```xml
+
+```
Set other paint type:
```kotlin
paintableView.paintType = PaintType.PAINT_GROUP
```
+```xml
+app:paintType="GROUP"
+```
+```xml
+app:paintType="PATH"
+```
Set other paint color:
```kotlin
paintableView.paintColor = resources.getColor(R.color.blue)
```
+```xml
+app:paintColor="@color/blue"
+```
+
Reset layers color in PaintableVectorView:
```kotlin
diff --git a/app/build.gradle b/app/build.gradle
index b3c8794..af20330 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,14 +3,13 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
- compileSdkVersion 29
- buildToolsVersion "29.0.2"
+ compileSdkVersion 32
defaultConfig {
applicationId "com.jakubaniola.vectorpainterexample"
minSdkVersion 21
- targetSdkVersion 29
+ targetSdkVersion 32
versionCode 1
- versionName "1.0"
+ versionName "1.0.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
@@ -24,11 +23,11 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation 'androidx.appcompat:appcompat:1.1.0'
- implementation 'androidx.core:core-ktx:1.0.2'
- implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
- testImplementation 'junit:junit:4.12'
- androidTestImplementation 'androidx.test.ext:junit:1.1.0'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+ implementation 'androidx.appcompat:appcompat:1.5.0'
+ implementation 'androidx.core:core-ktx:1.8.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation project(':paintablevectorview')
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d12e2ab..9e65d83 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -9,13 +9,21 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/jakubaniola/paintablevectorviewapp/InitializedInCodeActivity.kt b/app/src/main/java/com/jakubaniola/paintablevectorviewapp/InitializedInCodeActivity.kt
new file mode 100644
index 0000000..1a9b722
--- /dev/null
+++ b/app/src/main/java/com/jakubaniola/paintablevectorviewapp/InitializedInCodeActivity.kt
@@ -0,0 +1,66 @@
+package com.jakubaniola.paintablevectorviewapp
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import com.jakubaniola.paintablevectorview.PaintType
+import com.jakubaniola.paintablevectorview.PaintableVectorView
+import kotlinx.android.synthetic.main.activity_initialized_in_code.*
+import kotlinx.android.synthetic.main.activity_main.*
+
+class InitializedInCodeActivity : AppCompatActivity() {
+
+ private lateinit var paintableView: PaintableVectorView
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_initialized_in_code)
+ }
+
+ override fun onStart() {
+ super.onStart()
+ paintableView = PaintableVectorView(
+ this,
+ R.drawable.ic_car,
+ PaintType.PAINT_GROUP,
+ resources.getColor(R.color.blue)
+ )
+ setupPaintableView()
+ setupResetButton()
+ setupPaintTypeButtons()
+ setupPaintColorButtons()
+ }
+
+ private fun setupResetButton() {
+ resetColorsButton.setOnClickListener {
+ paintableView.resetColors()
+ }
+ }
+
+ private fun setupPaintTypeButtons() {
+ drawPathButton.setOnClickListener {
+ paintableView.paintType = PaintType.PAINT_PATH
+ }
+ drawGroupButton.setOnClickListener {
+ paintableView.paintType = PaintType.PAINT_GROUP
+ }
+ }
+
+ private fun setupPaintColorButtons() {
+ paintBlueButton.setOnClickListener {
+ paintableView.paintColor = resources.getColor(R.color.blue)
+ }
+ paintRedButton.setOnClickListener {
+ paintableView.paintColor = resources.getColor(R.color.red)
+ }
+ paintGreenButton.setOnClickListener {
+ paintableView.paintColor = resources.getColor(R.color.green)
+ }
+ paintYellowButton.setOnClickListener {
+ paintableView.paintColor = resources.getColor(R.color.yellow)
+ }
+ }
+
+ private fun setupPaintableView() {
+ paintableBoxLayout.addView(paintableView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/jakubaniola/paintablevectorviewapp/InitializedInXmlActivity.kt b/app/src/main/java/com/jakubaniola/paintablevectorviewapp/InitializedInXmlActivity.kt
new file mode 100644
index 0000000..1f123ad
--- /dev/null
+++ b/app/src/main/java/com/jakubaniola/paintablevectorviewapp/InitializedInXmlActivity.kt
@@ -0,0 +1,53 @@
+package com.jakubaniola.paintablevectorviewapp
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import com.jakubaniola.paintablevectorview.PaintType
+import com.jakubaniola.paintablevectorview.PaintableVectorView
+import kotlinx.android.synthetic.main.activity_initialized_in_xml.*
+import kotlinx.android.synthetic.main.activity_main.*
+
+class InitializedInXmlActivity : AppCompatActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_initialized_in_xml)
+ }
+
+ override fun onStart() {
+ super.onStart()
+ setupResetButton()
+ setupPaintTypeButtons()
+ setupPaintColorButtons()
+ }
+
+ private fun setupResetButton() {
+ resetColorsButton.setOnClickListener {
+ paintableView.resetColors()
+ }
+ }
+
+ private fun setupPaintTypeButtons() {
+ drawPathButton.setOnClickListener {
+ paintableView.paintType = PaintType.PAINT_PATH
+ }
+ drawGroupButton.setOnClickListener {
+ paintableView.paintType = PaintType.PAINT_GROUP
+ }
+ }
+
+ private fun setupPaintColorButtons() {
+ paintBlueButton.setOnClickListener {
+ paintableView.paintColor = resources.getColor(R.color.blue)
+ }
+ paintRedButton.setOnClickListener {
+ paintableView.paintColor = resources.getColor(R.color.red)
+ }
+ paintGreenButton.setOnClickListener {
+ paintableView.paintColor = resources.getColor(R.color.green)
+ }
+ paintYellowButton.setOnClickListener {
+ paintableView.paintColor = resources.getColor(R.color.yellow)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/jakubaniola/paintablevectorviewapp/MainActivity.kt b/app/src/main/java/com/jakubaniola/paintablevectorviewapp/MainActivity.kt
index 6040a25..58bad5e 100644
--- a/app/src/main/java/com/jakubaniola/paintablevectorviewapp/MainActivity.kt
+++ b/app/src/main/java/com/jakubaniola/paintablevectorviewapp/MainActivity.kt
@@ -1,15 +1,12 @@
package com.jakubaniola.paintablevectorviewapp
+import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
-import com.jakubaniola.paintablevectorview.PaintType
-import com.jakubaniola.paintablevectorview.PaintableVectorView
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
- private lateinit var paintableView: PaintableVectorView
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
@@ -17,49 +14,16 @@ class MainActivity : AppCompatActivity() {
override fun onStart() {
super.onStart()
- paintableView = PaintableVectorView(
- this,
- R.drawable.ic_car,
- PaintType.PAINT_GROUP,
- resources.getColor(R.color.blue)
- )
- setupPaintableView()
- setupResetButton()
- setupPaintTypeButtons()
- setupPaintColorButtons()
- }
-
- private fun setupResetButton() {
- resetColorsButton.setOnClickListener {
- paintableView.resetColors()
+ codeButton.setOnClickListener {
+ startActivity(
+ Intent(this, InitializedInCodeActivity::class.java)
+ )
}
- }
-
- private fun setupPaintTypeButtons() {
- drawPathButton.setOnClickListener {
- paintableView.paintType = PaintType.PAINT_PATH
- }
- drawGroupButton.setOnClickListener {
- paintableView.paintType = PaintType.PAINT_GROUP
+ xmlButton.setOnClickListener {
+ startActivity(
+ Intent(this, InitializedInXmlActivity::class.java)
+ )
}
}
- private fun setupPaintColorButtons() {
- paintBlueButton.setOnClickListener {
- paintableView.paintColor = resources.getColor(R.color.blue)
- }
- paintRedButton.setOnClickListener {
- paintableView.paintColor = resources.getColor(R.color.red)
- }
- paintGreenButton.setOnClickListener {
- paintableView.paintColor = resources.getColor(R.color.green)
- }
- paintYellowButton.setOnClickListener {
- paintableView.paintColor = resources.getColor(R.color.yellow)
- }
- }
-
- private fun setupPaintableView() {
- paintableBoxLayout.addView(paintableView)
- }
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_initialized_in_code.xml b/app/src/main/res/layout/activity_initialized_in_code.xml
new file mode 100644
index 0000000..41d2575
--- /dev/null
+++ b/app/src/main/res/layout/activity_initialized_in_code.xml
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_initialized_in_xml.xml b/app/src/main/res/layout/activity_initialized_in_xml.xml
new file mode 100644
index 0000000..5dc4b93
--- /dev/null
+++ b/app/src/main/res/layout/activity_initialized_in_xml.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 41d2575..05c5698 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -8,113 +8,32 @@
android:orientation="vertical">
-
-
-
-
+ app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toBottomOf="@+id/initTypeTextView" />
-
-
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@+id/initTypeTextView" />
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ab024ed..c84d388 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -9,4 +9,7 @@
yellow
Choose paint type:
RESET COLORS
+ Choose init type
+ CODE
+ XML
diff --git a/build.gradle b/build.gradle
index d350745..6603e8f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,13 +1,13 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- ext.kotlin_version = '1.3.50'
+ ext.kotlin_version = '1.7.10'
repositories {
google()
- jcenter()
+ mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.5.2'
+ classpath 'com.android.tools.build:gradle:7.2.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
@@ -15,7 +15,7 @@ buildscript {
allprojects {
repositories {
google()
- jcenter()
+ mavenCentral()
maven { url 'https://jitpack.io' }
}
}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..2d8d1e4
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1 @@
+android.useAndroidX=true
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 5b817a1..8e85dcd 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
\ No newline at end of file
diff --git a/paintablevectorview/build.gradle b/paintablevectorview/build.gradle
index 12543b7..3527c97 100644
--- a/paintablevectorview/build.gradle
+++ b/paintablevectorview/build.gradle
@@ -1,17 +1,14 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'maven-publish'
android {
- compileSdkVersion 29
- buildToolsVersion "29.0.2"
-
+ compileSdkVersion 32
defaultConfig {
minSdkVersion 21
- targetSdkVersion 29
- versionCode 1
- versionName "1.0"
+ targetSdkVersion 32
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
@@ -29,9 +26,19 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation 'androidx.appcompat:appcompat:1.1.0'
- implementation 'androidx.core:core-ktx:1.0.2'
- testImplementation 'junit:junit:4.12'
- androidTestImplementation 'androidx.test.ext:junit:1.1.0'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+ implementation 'androidx.appcompat:appcompat:1.5.0'
+ implementation 'androidx.core:core-ktx:1.8.0'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
+
+project.afterEvaluate {
+ publishing {
+ publications {
+ release(MavenPublication) {
+ from components.release
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/paintablevectorview/src/main/java/com/jakubaniola/paintablevectorview/PaintableVectorView.kt b/paintablevectorview/src/main/java/com/jakubaniola/paintablevectorview/PaintableVectorView.kt
index 9572340..6f2a431 100644
--- a/paintablevectorview/src/main/java/com/jakubaniola/paintablevectorview/PaintableVectorView.kt
+++ b/paintablevectorview/src/main/java/com/jakubaniola/paintablevectorview/PaintableVectorView.kt
@@ -2,21 +2,71 @@ package com.jakubaniola.paintablevectorview
import android.content.Context
import android.graphics.drawable.ShapeDrawable
+import android.util.AttributeSet
import android.view.MotionEvent
-import android.widget.ImageView
+import androidx.appcompat.widget.AppCompatImageView
+import androidx.core.content.res.use
-class PaintableVectorView(
- context: Context,
- drawableId: Int,
- var paintType: PaintType = PaintType.PAINT_PATH,
- var paintColor: Int
-) : ImageView(context) {
- private var vectorShape: LayeredVectorShape = LayeredVectorShape(context, drawableId)
+class PaintableVectorView : AppCompatImageView {
- init {
+ constructor(
+ context: Context,
+ drawableId: Int,
+ paintType: PaintType = PaintType.PAINT_PATH,
+ paintColor: Int
+ ) : super(context) {
+ this.drawableId = drawableId
+ this.paintType = paintType
+ this.paintColor = paintColor
+ initBackground()
+ }
+
+ constructor(
+ context: Context, attrs: AttributeSet
+ ) : super(context, attrs) {
+ initArgs(context, attrs)
+ initBackground()
+ }
+
+ constructor(
+ context: Context, attrs: AttributeSet, defStyle: Int = 0
+ ) : super(context, attrs, defStyle) {
+ initArgs(context, attrs)
+ initBackground()
+ }
+
+ private var drawableId: Int = INVALID_RESOURCE
+ var paintColor: Int = INVALID_RESOURCE
+ var paintType: PaintType = PaintType.PAINT_PATH
+ private lateinit var vectorShape: LayeredVectorShape
+
+ private fun initArgs(context: Context, attrsSet: AttributeSet) {
+ val attrs = context.obtainStyledAttributes(attrsSet, R.styleable.PaintableVectorView)
+ attrs.use {
+ drawableId =
+ attrs.getResourceId(R.styleable.PaintableVectorView_drawable, INVALID_RESOURCE)
+ paintColor =
+ attrs.getResourceId(R.styleable.PaintableVectorView_paintColor, INVALID_RESOURCE)
+ val paintTypeInt =
+ attrs.getInt(R.styleable.PaintableVectorView_paintType, INVALID_RESOURCE)
+ paintType = PaintType.values()[paintTypeInt]
+ }
+ }
+
+ private fun initBackground() {
+ checkIfArgumentsAreValid()
+ vectorShape = LayeredVectorShape(context, drawableId)
background = ShapeDrawable(vectorShape)
}
+ private fun checkIfArgumentsAreValid() {
+ if (drawableId == INVALID_RESOURCE) {
+ throw IllegalArgumentException("Missing obligatory drawableId")
+ } else if (paintColor == INVALID_RESOURCE) {
+ throw IllegalArgumentException("Missing obligatory paintColor")
+ }
+ }
+
override fun onTouchEvent(event: MotionEvent): Boolean {
when (paintType) {
PaintType.PAINT_PATH -> onPathPaint(event)
@@ -54,4 +104,8 @@ class PaintableVectorView(
vectorShape.resetColors()
invalidate()
}
+
+ companion object {
+ private const val INVALID_RESOURCE = -1
+ }
}
\ No newline at end of file
diff --git a/paintablevectorview/src/main/res/values/attrs.xml b/paintablevectorview/src/main/res/values/attrs.xml
new file mode 100644
index 0000000..59521b8
--- /dev/null
+++ b/paintablevectorview/src/main/res/values/attrs.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file