Skip to content

Commit

Permalink
Merge pull request #9 from agrawalsuneet/dev
Browse files Browse the repository at this point in the history
Merge dev to master for 0.5 release
  • Loading branch information
agrawalsuneet authored Sep 18, 2017
2 parents b426caa + 075809e commit 8cdb3d8
Show file tree
Hide file tree
Showing 11 changed files with 320 additions and 30 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ android {
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.agrawalsuneet.loaders"
minSdkVersion 14
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
Expand Down
30 changes: 27 additions & 3 deletions app/src/main/java/com/agrawalsuneet/loaders/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@ import android.view.Menu
import android.view.MenuItem
import android.widget.LinearLayout
import com.agrawalsuneet.dotsloader.ui.CircularDotsLoader
import com.agrawalsuneet.dotsloader.ui.LazyLoader
import com.agrawalsuneet.dotsloader.ui.LinearDotsLoader
import com.agrawalsuneet.loaders.dialog.DotsLoaderDialog

class MainActivity : AppCompatActivity() {

lateinit var containerLL : LinearLayout

private var colorSwitch = false

lateinit var loader: LinearDotsLoader
Expand All @@ -20,12 +23,33 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

initView()
containerLL = findViewById(R.id.container) as LinearLayout

//initView()

initLazyLoader()
}

private fun initView() {
val containerLL = findViewById(R.id.container) as LinearLayout
private fun initLazyLoader() {
var lazyLoader = LazyLoader(this, 30, 20, ContextCompat.getColor(this, R.color.purple_selected))
.apply {
animDuration = 500
firstDelayDuration = 100
secondDelayDuration = 200
}

/*var lazyLoader = LazyLoader(this).apply{
animDuration = 500
firstDelayDuration = 100
secondDelayDuration = 200
}
lazyLoader.dotsRadius = 60
lazyLoader.dotsDist = 60*/

containerLL.addView(lazyLoader)
}

private fun initView() {
loader = LinearDotsLoader(this)
loader.defaultColor = ContextCompat.getColor(this, R.color.loader_defalut)
loader.selectedColor = ContextCompat.getColor(this, R.color.loader_selected)
Expand Down
34 changes: 23 additions & 11 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,19 @@
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.agrawalsuneet.loaders.MainActivity">


<com.agrawalsuneet.dotsloader.ui.LazyLoader
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:lazyloader_dotsColor="@color/pink_selected"
app:lazyloader_dotsDist="10dp"
app:lazyloader_dotsRadius="16dp"
app:lazyloader_animDur="2000"
app:lazyloader_firstDelayDur="500"
app:lazyloader_secondDelayDur="1000"
android:layout_margin="20dp"
android:layout_marginTop="30dp"/>

<!--<com.agrawalsuneet.dotsloader.ui.LinearDotsLoader
android:layout_width="wrap_content"
android:layout_height="wrap_content"
Expand All @@ -26,9 +39,9 @@
app:loader_isSingleDir="true"
app:loader_noOfDots="5"
app:loader_selectedRadius="16dp"
app:loader_showRunningShadow="false" />
app:loader_showRunningShadow="false" />-->

<com.agrawalsuneet.dotsloader.ui.LinearDotsLoader
<!--<com.agrawalsuneet.dotsloader.ui.LinearDotsLoader
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
Expand All @@ -38,9 +51,9 @@
app:loader_dotsDist="6dp"
app:loader_isSingleDir="false"
app:loader_noOfDots="8"
app:loader_selectedRadius="16dp" />
app:loader_selectedRadius="16dp" />-->

<com.agrawalsuneet.dotsloader.ui.LinearDotsLoader
<!--<com.agrawalsuneet.dotsloader.ui.LinearDotsLoader
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
Expand All @@ -52,12 +65,11 @@
app:loader_expandOnSelect="true"
app:loader_isSingleDir="false"
app:loader_noOfDots="6"
app:loader_selectedColor="@color/pink_selected"
app:loader_selectedRadius="20dp" />
app:loader_selectedRadius="20dp" />-->


<com.agrawalsuneet.dotsloader.ui.LinearDotsLoader
<!--<com.agrawalsuneet.dotsloader.ui.LinearDotsLoader
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
Expand All @@ -66,10 +78,10 @@
app:loader_defaultColor="@color/blue_delfault"
app:loader_dotsDist="6dp"
app:loader_isSingleDir="true"
app:loader_selectedColor="@color/blue_selected" />
app:loader_selectedColor="@color/blue_selected" />-->


<com.agrawalsuneet.dotsloader.ui.LinearDotsLoader
<!--<com.agrawalsuneet.dotsloader.ui.LinearDotsLoader
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
Expand All @@ -91,9 +103,9 @@
app:loader_firstShadowColor="@color/pink_selected"
app:loader_secondShadowColor="@color/pink_default"
app:loader_selectedColor="@color/purple_selected"
app:loader_showRunningShadow="true" />
app:loader_showRunningShadow="true" />-->

<com.agrawalsuneet.dotsloader.ui.CircularDotsLoader
<!-- <com.agrawalsuneet.dotsloader.ui.CircularDotsLoader
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:loader_animDur="1000"
Expand Down
8 changes: 4 additions & 4 deletions dotsloader/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ buildscript {
ext {
PUBLISH_GROUP_ID = 'com.agrawalsuneet.androidlibs'
PUBLISH_ARTIFACT_ID = 'dotsloader'
PUBLISH_VERSION = '0.4'
PUBLISH_VERSION = '0.5'
}

configurations {
Expand All @@ -32,10 +32,10 @@ android {
buildToolsVersion "25.0.2"

defaultConfig {
minSdkVersion 14
minSdkVersion 16
targetSdkVersion 25
versionCode 4
versionName "0.4"
versionCode 5
versionName "0.5"
}
buildTypes {
release {
Expand Down
14 changes: 7 additions & 7 deletions dotsloader/dotsloader.iml
Original file line number Diff line number Diff line change
Expand Up @@ -72,20 +72,20 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ import android.util.AttributeSet
import android.view.View

import com.agrawalsuneet.dotsloader.R
import com.agrawalsuneet.dotsloader.ui.basicviews.LoaderContract
import com.agrawalsuneet.dotsloader.utils.Helper

/**
* Created by Suneet on 13/01/17.
*/
abstract class DotsLoader : View {
abstract class DotsLoader : View, LoaderContract {

var animDur = 500

Expand Down Expand Up @@ -41,7 +42,7 @@ abstract class DotsLoader : View {
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr)


protected open fun initAttributes(attrs: AttributeSet) {
override fun initAttributes(attrs: AttributeSet) {

val typedArray = context.obtainStyledAttributes(attrs, R.styleable.DotsLoader, 0, 0)

Expand Down
166 changes: 166 additions & 0 deletions dotsloader/src/main/java/com/agrawalsuneet/dotsloader/ui/LazyLoader.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
package com.agrawalsuneet.dotsloader.ui

import android.content.Context
import android.os.Handler
import android.util.AttributeSet
import android.view.Gravity
import android.view.ViewTreeObserver
import android.view.animation.Animation
import android.view.animation.TranslateAnimation
import android.widget.LinearLayout
import com.agrawalsuneet.dotsloader.R
import com.agrawalsuneet.dotsloader.ui.basicviews.CircleView
import com.agrawalsuneet.dotsloader.ui.basicviews.LoaderContract


/**
* Created by ballu on 13/08/17.
*/
class LazyLoader : LinearLayout, LoaderContract {

var animDuration: Int = 500
var firstDelayDuration: Int = 100
var secondDelayDuration: Int = 200

private lateinit var firstCircle: CircleView
private lateinit var secondCircle: CircleView
private lateinit var thirdCircle: CircleView

constructor(context: Context, dotsRadius: Int, dotsDist: Int, dotsColor: Int) : super(context) {
this.dotsRadius = dotsRadius
this.dotsDist = dotsDist
this.dotsColor = dotsColor
initView()
}

constructor(context: Context?) : super(context) {
initView()
}

constructor(context: Context?, attrs: AttributeSet) : super(context, attrs) {
initAttributes(attrs)
initView()
}

constructor(context: Context?, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
initAttributes(attrs)
initView()
}

override fun initAttributes(attrs: AttributeSet) {
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.LazyLoader, 0, 0)

this.dotsRadius = typedArray.getDimensionPixelSize(R.styleable.LazyLoader_lazyloader_dotsRadius, 30)
this.dotsDist = typedArray.getDimensionPixelSize(R.styleable.LazyLoader_lazyloader_dotsDist, 15)
this.dotsColor = typedArray.getColor(R.styleable.LazyLoader_lazyloader_dotsColor,
resources.getColor(R.color.loader_defalut))

this.animDuration = typedArray.getInt(R.styleable.LazyLoader_lazyloader_animDur, 500)
this.firstDelayDuration = typedArray.getInt(R.styleable.LazyLoader_lazyloader_firstDelayDur, 100)
this.secondDelayDuration = typedArray.getInt(R.styleable.LazyLoader_lazyloader_secondDelayDur, 200)

typedArray.recycle()
}

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)

val calWidth = (6 * dotsRadius) + (2 * dotsDist)
val calHeight = 6 * dotsRadius

setMeasuredDimension(calWidth, calHeight)
}

private fun initView() {
removeAllViews()
removeAllViewsInLayout()

firstCircle = CircleView(context, dotsRadius, dotsColor)
secondCircle = CircleView(context, dotsRadius, dotsColor)
thirdCircle = CircleView(context, dotsRadius, dotsColor)

val params = LinearLayout.LayoutParams((2 * dotsRadius), 2 * dotsRadius)
params.leftMargin = dotsDist

setVerticalGravity(Gravity.BOTTOM)

addView(firstCircle)
addView(secondCircle, params)
addView(thirdCircle, params)


val loaderView = this

viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
startLoading()

val vto = loaderView.viewTreeObserver
vto.removeOnGlobalLayoutListener(this)
}
})

}

private fun startLoading() {

val trans1Anim = getTranslateAnim()
firstCircle.startAnimation(trans1Anim)

val trans2Anim = getTranslateAnim()

Handler().postDelayed({
secondCircle.startAnimation(trans2Anim)
}, firstDelayDuration.toLong())


val trans3Anim = getTranslateAnim()

Handler().postDelayed({
thirdCircle.startAnimation(trans3Anim)
}, secondDelayDuration.toLong())

trans3Anim.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationRepeat(animation: Animation?) {
}

override fun onAnimationEnd(animation: Animation?) {
startLoading()
}

override fun onAnimationStart(animation: Animation) {
}
})
}

private fun getTranslateAnim(): TranslateAnimation {
val transAnim = TranslateAnimation(0f, 0f, 0f, (-(4 * dotsRadius).toFloat()))
transAnim.duration = animDuration.toLong()
transAnim.fillAfter = true
transAnim.repeatCount = 1
transAnim.repeatMode = Animation.REVERSE

return transAnim
}

var dotsRadius: Int = 30
get() = field
set(value) {
field = value
initView()
}

var dotsDist: Int = 15
get() = field
set(value) {
field = value
initView()
}

var dotsColor: Int = resources.getColor(R.color.loader_defalut, null)
get() = field
set(value) {
field = value
initView()
}
}
Loading

0 comments on commit 8cdb3d8

Please sign in to comment.