Skip to content

Commit eda15e0

Browse files
author
Joao Rutkoski
committed
Enabled Databinding
1 parent 3653a5e commit eda15e0

File tree

11 files changed

+66
-101
lines changed

11 files changed

+66
-101
lines changed
0 Bytes
Binary file not shown.

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ android {
1111
applicationId "com.opencraft.android.gradienttextview"
1212
minSdkVersion 15
1313
targetSdkVersion 27
14-
versionCode 1
15-
versionName "1.0.1"
14+
versionCode 2
15+
versionName "1.1.0"
1616
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1717
}
1818
buildTypes {
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.opencraft.android.gradienttextview.sample
22

3-
import android.arch.lifecycle.ViewModelProviders
43
import android.databinding.DataBindingUtil
4+
import android.graphics.Color
55
import android.os.Bundle
66
import android.support.v7.app.AppCompatActivity
77
import com.opencraft.android.gradienttextview.R
@@ -11,8 +11,11 @@ class MainActivity : AppCompatActivity() {
1111

1212
override fun onCreate(savedInstanceState: Bundle?) {
1313
super.onCreate(savedInstanceState)
14-
var vm = ViewModelProviders.of(this).get(MainViewModel::class.java)
15-
var binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
14+
val vm = MainViewModel(this)
15+
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
1616
binding.vm = vm
17+
// binding.gradient.postDelayed({
18+
// binding.gradient.gradientColors = intArrayOf(Color.BLUE, Color.GREEN)
19+
// }, 1000)
1720
}
1821
}
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.opencraft.android.gradienttextview.sample
22

3-
import android.arch.lifecycle.ViewModel
3+
import android.content.Context
44
import android.databinding.ObservableField
5+
import com.opencraft.android.gradienttextview.R
56

6-
class MainViewModel : ViewModel() {
7+
class MainViewModel(context: Context) {
78
val text = ObservableField<String>("aaaaaaaaaa\naaaaaaaaaa\naaaaaaaaaa\naaaaaaaaaa\naaaaaaaaaa")
9+
val colors = context.resources.getIntArray(R.array.gradient_default)
810
}

app/src/main/res/layout/activity_main.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@
2424
android:text="aaaaaaaaaaaaa\naaaaaaaaaaaaa\naaaaaaaaaaaaa\naaaaaaaaaaaaaa"
2525
android:textSize="22sp"
2626
android:textStyle="bold"
27-
app:color_array="@array/gradient_default"
28-
app:color_span_array="@array/gradient_color_span_default"
2927
app:gradient_end="BOTTOM_RIGHT"
30-
app:gradient_start="TOP_LEFT" />
28+
app:gradient_start="TOP_LEFT"
29+
app:gradientColors="@{vm.colors}"
30+
/>
3131

3232
<com.opencraft.library.GradientTextView
3333
android:id="@+id/gradient"
@@ -38,7 +38,7 @@
3838
android:textSize="22sp"
3939
android:textStyle="bold"
4040
app:angle="-45"
41-
app:color_array="@array/gradient_default"
41+
app:gradientColors="@array/gradient_default"
4242
app:color_span_array="@array/gradient_color_span_default" />
4343

4444
</LinearLayout>

app/src/main/res/values/arrays.xml

Lines changed: 0 additions & 12 deletions
This file was deleted.

app/src/main/res/values/attrs.xml

Lines changed: 0 additions & 28 deletions
This file was deleted.

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ buildscript {
77
jcenter()
88
}
99
dependencies {
10-
classpath 'com.android.tools.build:gradle:3.1.3'
10+
classpath 'com.android.tools.build:gradle:3.1.4'
1111
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
1212

1313
// NOTE: Do not place your application dependencies here; they belong

library/src/main/java/com/opencraft/library/GradientTextView.kt

Lines changed: 44 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,28 @@
11
package com.opencraft.library
22

3-
import android.annotation.SuppressLint
43
import android.content.Context
54
import android.content.res.TypedArray
6-
import android.databinding.InverseBindingMethod
7-
import android.databinding.InverseBindingMethods
8-
import android.graphics.Color
9-
import android.graphics.LinearGradient
10-
import android.graphics.Point
11-
import android.graphics.Shader
5+
import android.graphics.*
126
import android.support.v7.widget.AppCompatTextView
137
import android.util.AttributeSet
148

15-
@InverseBindingMethods(InverseBindingMethod(type = GradientTextView::class, attribute = "android:text"))
169
class GradientTextView constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : AppCompatTextView(context, attrs, defStyleAttr) {
1710

1811
constructor(context: Context) : this(context, null)
1912
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
2013

21-
private var gradientColors = intArrayOf(Color.BLACK, Color.WHITE)
2214
private var gradientColorPos = floatArrayOf(0f, 1f)
23-
private var linearGradient: LinearGradient? = null
2415
private var angle = 0.0
2516
private var startOption = -1
2617
private var endOption = -1
18+
private var changedColors = true
2719

28-
val TOP_LEFT = 0
29-
val TOP_CENTER = 1
30-
val MIDDLE_RIGHT = 2
31-
val MIDDLE_LEFT = 3
32-
val TOP_RIGHT = 4
33-
val BOTTOM_LEFT = 5
34-
val BOTTOM_CENTER = 6
35-
val BOTTOM_RIGHT = 7
20+
var gradientColors = intArrayOf(Color.BLACK, Color.WHITE)
21+
set(value) {
22+
field = value
23+
changedColors = true
24+
invalidate()
25+
}
3626

3727
init {
3828
attrs?.let {
@@ -51,6 +41,18 @@ class GradientTextView constructor(context: Context, attrs: AttributeSet?, defSt
5141
}
5242
}
5343

44+
private fun getLinearGradient(): LinearGradient {
45+
val gradientStartPoint = getStartPoint()
46+
val gradientEndPoint = getEndPoint()
47+
return LinearGradient(gradientStartPoint.x.toFloat(),
48+
gradientStartPoint.y.toFloat(),
49+
gradientEndPoint.x.toFloat(),
50+
gradientEndPoint.y.toFloat(),
51+
gradientColors,
52+
gradientColorPos,
53+
Shader.TileMode.CLAMP)
54+
}
55+
5456
private fun loadAngle(typedArray: TypedArray) {
5557
angle = typedArray.getInteger(R.styleable.GradientTextView_angle, 0).toDouble()
5658
}
@@ -75,37 +77,23 @@ class GradientTextView constructor(context: Context, attrs: AttributeSet?, defSt
7577
}
7678

7779
private fun loadColors(typedArray: TypedArray) {
78-
val colors = resources.getStringArray(typedArray
79-
.getResourceId(R.styleable.GradientTextView_color_array, R.array.gradient_default))
80-
colors?.let {
81-
gradientColors = IntArray(it.size)
82-
for (i in 0 until it.size) {
83-
gradientColors[i] = Color.parseColor(it[i])
84-
}
85-
}
80+
gradientColors = resources.getIntArray(typedArray
81+
.getResourceId(R.styleable.GradientTextView_gradientColors, R.array.gradient_default))
8682
}
8783

88-
@SuppressLint("DrawAllocation")
89-
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
90-
super.onLayout(changed, left, top, right, bottom)
91-
if (changed) {
92-
93-
val startPoint = getStartPoint()
94-
val endPoint = getEndPoint()
95-
96-
linearGradient = LinearGradient(startPoint.x.toFloat(), startPoint.y.toFloat(), endPoint.x.toFloat(), endPoint.y.toFloat(),
97-
gradientColors,
98-
gradientColorPos,
99-
Shader.TileMode.CLAMP)
100-
paint.shader = linearGradient
84+
override fun onDraw(canvas: Canvas?) {
85+
if (changedColors) {
86+
changedColors = false
87+
paint.shader = getLinearGradient()
10188
}
89+
super.onDraw(canvas)
10290
}
10391

10492
private fun getEndPoint(): Point {
105-
if (startOption > -1 && endOption > -1) {
106-
return getPointFromEnum(endOption)
93+
return if (startOption > -1 && endOption > -1) {
94+
getPointFromEnum(endOption)
10795
} else {
108-
return calcEndFromAngle()
96+
calcEndFromAngle()
10997

11098
}
11199
}
@@ -120,10 +108,10 @@ class GradientTextView constructor(context: Context, attrs: AttributeSet?, defSt
120108
}
121109

122110
private fun getStartPoint(): Point {
123-
if (startOption > -1 && endOption > -1) {
124-
return getPointFromEnum(startOption)
111+
return if (startOption > -1 && endOption > -1) {
112+
getPointFromEnum(startOption)
125113
} else {
126-
return calcStartFromAngle()
114+
calcStartFromAngle()
127115
}
128116
}
129117

@@ -151,4 +139,15 @@ class GradientTextView constructor(context: Context, attrs: AttributeSet?, defSt
151139
val startY = centerY + (width - centerX) * Math.sin(radians) + (centerY - centerY) * Math.cos(radians);
152140
return Point(startX.toInt(), startY.toInt())
153141
}
142+
143+
companion object {
144+
const val TOP_LEFT = 0
145+
const val TOP_CENTER = 1
146+
const val MIDDLE_RIGHT = 2
147+
const val MIDDLE_LEFT = 3
148+
const val TOP_RIGHT = 4
149+
const val BOTTOM_LEFT = 5
150+
const val BOTTOM_CENTER = 6
151+
const val BOTTOM_RIGHT = 7
152+
}
154153
}

library/src/main/res/values/arrays.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources>
3-
<string-array name="gradient_default">
4-
<item>#000000</item>
5-
<item>#FFFFFF</item>
6-
</string-array>
3+
<integer-array name="gradient_default">
4+
<item>@android:color/holo_red_dark</item>
5+
<item>@android:color/holo_blue_bright</item>
6+
</integer-array>
77

88
<integer-array name="gradient_color_span_default">
99
<item>1</item>

0 commit comments

Comments
 (0)