Skip to content

Commit

Permalink
Enabled Databinding
Browse files Browse the repository at this point in the history
  • Loading branch information
Joao Rutkoski committed Aug 21, 2018
1 parent 3653a5e commit eda15e0
Show file tree
Hide file tree
Showing 11 changed files with 66 additions and 101 deletions.
Binary file modified .idea/caches/build_file_checksums.ser
Binary file not shown.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ android {
applicationId "com.opencraft.android.gradienttextview"
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0.1"
versionCode 2
versionName "1.1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.opencraft.android.gradienttextview.sample

import android.arch.lifecycle.ViewModelProviders
import android.databinding.DataBindingUtil
import android.graphics.Color
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import com.opencraft.android.gradienttextview.R
Expand All @@ -11,8 +11,11 @@ class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var vm = ViewModelProviders.of(this).get(MainViewModel::class.java)
var binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
val vm = MainViewModel(this)
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
binding.vm = vm
// binding.gradient.postDelayed({
// binding.gradient.gradientColors = intArrayOf(Color.BLUE, Color.GREEN)
// }, 1000)
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.opencraft.android.gradienttextview.sample

import android.arch.lifecycle.ViewModel
import android.content.Context
import android.databinding.ObservableField
import com.opencraft.android.gradienttextview.R

class MainViewModel : ViewModel() {
class MainViewModel(context: Context) {
val text = ObservableField<String>("aaaaaaaaaa\naaaaaaaaaa\naaaaaaaaaa\naaaaaaaaaa\naaaaaaaaaa")
val colors = context.resources.getIntArray(R.array.gradient_default)
}
8 changes: 4 additions & 4 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@
android:text="aaaaaaaaaaaaa\naaaaaaaaaaaaa\naaaaaaaaaaaaa\naaaaaaaaaaaaaa"
android:textSize="22sp"
android:textStyle="bold"
app:color_array="@array/gradient_default"
app:color_span_array="@array/gradient_color_span_default"
app:gradient_end="BOTTOM_RIGHT"
app:gradient_start="TOP_LEFT" />
app:gradient_start="TOP_LEFT"
app:gradientColors="@{vm.colors}"
/>

<com.opencraft.library.GradientTextView
android:id="@+id/gradient"
Expand All @@ -38,7 +38,7 @@
android:textSize="22sp"
android:textStyle="bold"
app:angle="-45"
app:color_array="@array/gradient_default"
app:gradientColors="@array/gradient_default"
app:color_span_array="@array/gradient_color_span_default" />

</LinearLayout>
Expand Down
12 changes: 0 additions & 12 deletions app/src/main/res/values/arrays.xml

This file was deleted.

28 changes: 0 additions & 28 deletions app/src/main/res/values/attrs.xml

This file was deleted.

2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.android.tools.build:gradle:3.1.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

// NOTE: Do not place your application dependencies here; they belong
Expand Down
89 changes: 44 additions & 45 deletions library/src/main/java/com/opencraft/library/GradientTextView.kt
Original file line number Diff line number Diff line change
@@ -1,38 +1,28 @@
package com.opencraft.library

import android.annotation.SuppressLint
import android.content.Context
import android.content.res.TypedArray
import android.databinding.InverseBindingMethod
import android.databinding.InverseBindingMethods
import android.graphics.Color
import android.graphics.LinearGradient
import android.graphics.Point
import android.graphics.Shader
import android.graphics.*
import android.support.v7.widget.AppCompatTextView
import android.util.AttributeSet

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

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

private var gradientColors = intArrayOf(Color.BLACK, Color.WHITE)
private var gradientColorPos = floatArrayOf(0f, 1f)
private var linearGradient: LinearGradient? = null
private var angle = 0.0
private var startOption = -1
private var endOption = -1
private var changedColors = true

val TOP_LEFT = 0
val TOP_CENTER = 1
val MIDDLE_RIGHT = 2
val MIDDLE_LEFT = 3
val TOP_RIGHT = 4
val BOTTOM_LEFT = 5
val BOTTOM_CENTER = 6
val BOTTOM_RIGHT = 7
var gradientColors = intArrayOf(Color.BLACK, Color.WHITE)
set(value) {
field = value
changedColors = true
invalidate()
}

init {
attrs?.let {
Expand All @@ -51,6 +41,18 @@ class GradientTextView constructor(context: Context, attrs: AttributeSet?, defSt
}
}

private fun getLinearGradient(): LinearGradient {
val gradientStartPoint = getStartPoint()
val gradientEndPoint = getEndPoint()
return LinearGradient(gradientStartPoint.x.toFloat(),
gradientStartPoint.y.toFloat(),
gradientEndPoint.x.toFloat(),
gradientEndPoint.y.toFloat(),
gradientColors,
gradientColorPos,
Shader.TileMode.CLAMP)
}

private fun loadAngle(typedArray: TypedArray) {
angle = typedArray.getInteger(R.styleable.GradientTextView_angle, 0).toDouble()
}
Expand All @@ -75,37 +77,23 @@ class GradientTextView constructor(context: Context, attrs: AttributeSet?, defSt
}

private fun loadColors(typedArray: TypedArray) {
val colors = resources.getStringArray(typedArray
.getResourceId(R.styleable.GradientTextView_color_array, R.array.gradient_default))
colors?.let {
gradientColors = IntArray(it.size)
for (i in 0 until it.size) {
gradientColors[i] = Color.parseColor(it[i])
}
}
gradientColors = resources.getIntArray(typedArray
.getResourceId(R.styleable.GradientTextView_gradientColors, R.array.gradient_default))
}

@SuppressLint("DrawAllocation")
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
if (changed) {

val startPoint = getStartPoint()
val endPoint = getEndPoint()

linearGradient = LinearGradient(startPoint.x.toFloat(), startPoint.y.toFloat(), endPoint.x.toFloat(), endPoint.y.toFloat(),
gradientColors,
gradientColorPos,
Shader.TileMode.CLAMP)
paint.shader = linearGradient
override fun onDraw(canvas: Canvas?) {
if (changedColors) {
changedColors = false
paint.shader = getLinearGradient()
}
super.onDraw(canvas)
}

private fun getEndPoint(): Point {
if (startOption > -1 && endOption > -1) {
return getPointFromEnum(endOption)
return if (startOption > -1 && endOption > -1) {
getPointFromEnum(endOption)
} else {
return calcEndFromAngle()
calcEndFromAngle()

}
}
Expand All @@ -120,10 +108,10 @@ class GradientTextView constructor(context: Context, attrs: AttributeSet?, defSt
}

private fun getStartPoint(): Point {
if (startOption > -1 && endOption > -1) {
return getPointFromEnum(startOption)
return if (startOption > -1 && endOption > -1) {
getPointFromEnum(startOption)
} else {
return calcStartFromAngle()
calcStartFromAngle()
}
}

Expand Down Expand Up @@ -151,4 +139,15 @@ class GradientTextView constructor(context: Context, attrs: AttributeSet?, defSt
val startY = centerY + (width - centerX) * Math.sin(radians) + (centerY - centerY) * Math.cos(radians);
return Point(startX.toInt(), startY.toInt())
}

companion object {
const val TOP_LEFT = 0
const val TOP_CENTER = 1
const val MIDDLE_RIGHT = 2
const val MIDDLE_LEFT = 3
const val TOP_RIGHT = 4
const val BOTTOM_LEFT = 5
const val BOTTOM_CENTER = 6
const val BOTTOM_RIGHT = 7
}
}
8 changes: 4 additions & 4 deletions library/src/main/res/values/arrays.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="gradient_default">
<item>#000000</item>
<item>#FFFFFF</item>
</string-array>
<integer-array name="gradient_default">
<item>@android:color/holo_red_dark</item>
<item>@android:color/holo_blue_bright</item>
</integer-array>

<integer-array name="gradient_color_span_default">
<item>1</item>
Expand Down
1 change: 1 addition & 0 deletions library/src/main/res/values/attrs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
<resources>
<declare-styleable name="GradientTextView">
<attr name="color_array" format="reference" />
<attr name="gradientColors" format="reference" />
<attr name="color_span_array" format="reference" />
<attr name="angle" format="integer" />
<attr name="gradient_start" format="enum">
Expand Down

0 comments on commit eda15e0

Please sign in to comment.