Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cba0685

Browse files
committed
Added line-spinner loading animation
Added 'checked' and 'loading' changed event listener
1 parent 52cc883 commit cba0685

File tree

6 files changed

+309
-122
lines changed

6 files changed

+309
-122
lines changed
Lines changed: 70 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package cn.intret.lab.loadingtogglebutton
22

3+
import android.annotation.SuppressLint
34
import android.os.Bundle
45
import android.support.v7.app.AppCompatActivity
6+
import android.widget.TextView
57
import cn.intret.lab.library.LoadingToggleButton
68
import kotlinx.android.synthetic.main.activity_main.*
79

@@ -15,30 +17,84 @@ class MainActivity : AppCompatActivity() {
1517
}
1618

1719
private fun initViews() {
18-
// toggle1
19-
log1.text = getCheckDesc(toggle1.isChecked)
20-
toggle1.setOnCheckChangeListener { buttonView, isChecked -> log1.text = getCheckDesc(isChecked) }
21-
log1.setOnClickListener { toggle1.toggle() }
20+
// ------------------------------------------------
21+
// A rectangle toggle
22+
// ------------------------------------------------
23+
log1.text = getCheckDesc(toggle_rect1.isChecked)
24+
toggle_rect1.setOnCheckChangeListener { buttonView, isChecked -> log1.text = getCheckDesc(isChecked) }
25+
log1.setOnClickListener { toggle_rect1.toggle() }
2226

23-
// toggle2 toggle3
24-
toggle2.setOnCheckChangeListener { buttonView, isChecked -> toggle_round1.isChecked = isChecked }
27+
// toggle2 toggle3 will synchronized the state
28+
toggle_rect2.setOnCheckChangeListener { buttonView, isChecked -> toggle_round1.isChecked = isChecked }
2529

26-
// stop flicking
27-
updateFlickTextButton(toggle_round3)
30+
// ------------------------------------------------
31+
// A toggle with flicking animation
32+
// ------------------------------------------------
33+
34+
// handle toggle checked event
35+
toggle_flicking.setOnCheckChangeListener { toggleButton, isChecked ->
36+
updateLoadingStatus(toggle_flicking, tv_flicking_status)
37+
updateLoadingTextButton(toggle_flicking, btn_stop_flick)
38+
}
39+
40+
// handle toggle loading event
41+
toggle_flicking.setOnLoadingChangeListener { toggleButton, loading ->
42+
updateLoadingStatus(toggle_flicking, tv_flicking_status)
43+
updateLoadingTextButton(toggle_flicking, btn_stop_flick)
44+
}
45+
46+
// set toggle initial status
47+
updateLoadingTextButton(toggle_flicking, btn_stop_flick)
48+
49+
// interacted with Loading Toggle Button
2850
btn_stop_flick.setOnClickListener { v ->
29-
if (toggle_round3.isRunning) {
30-
toggle_round3.stop()
51+
if (toggle_flicking.isRunning) {
52+
toggle_flicking.stop()
3153
} else {
32-
toggle_round3.start()
54+
toggle_flicking.start()
55+
}
56+
}
57+
58+
// ------------------------------------------------
59+
// A toggle with loading animation
60+
// ------------------------------------------------
61+
62+
toggle_line_spinner.setOnCheckChangeListener { toggleButton, isChecked ->
63+
updateLoadingTextButton(toggle_line_spinner, btn_stop_loading)
64+
updateLoadingStatus(toggle_line_spinner, tv_loading_status)
65+
}
66+
toggle_line_spinner.setOnLoadingChangeListener { toggleButton, loading ->
67+
updateLoadingTextButton(toggle_line_spinner, btn_stop_loading)
68+
updateLoadingStatus(toggle_line_spinner, tv_loading_status)
69+
}
70+
71+
updateLoadingTextButton(toggle_line_spinner, btn_stop_loading)
72+
73+
btn_stop_loading.setOnClickListener { v ->
74+
if (toggle_line_spinner.isRunning) {
75+
toggle_line_spinner.stop()
76+
} else {
77+
toggle_line_spinner.start()
3378
}
34-
updateFlickTextButton(toggle_round3)
3579
}
3680
}
3781

82+
@SuppressLint("SetTextI18n")
83+
private fun updateLoadingStatus(loadingToggleButton: LoadingToggleButton, textView: TextView) {
84+
textView.text =
85+
"isLoading = " + loadingToggleButton.isLoading + "\r\n" +
86+
"isChecked = " + loadingToggleButton.isChecked
87+
}
88+
3889
private fun getCheckDesc(isChecked: Boolean): String =
3990
(if (isChecked) "It's checked ( click me! )" else "It's unchecked")
4091

41-
fun updateFlickTextButton(view: LoadingToggleButton) {
42-
if (!view.isRunning) btn_stop_flick.setText("START FLICK") else btn_stop_flick.setText("STOP FLICK")
92+
@SuppressLint("SetTextI18n")
93+
private fun updateLoadingTextButton(toggle_line_spinner: LoadingToggleButton, textView: TextView) {
94+
when {
95+
!toggle_line_spinner.isRunning -> textView.text = "START LOADING"
96+
else -> textView.text = "STOP LOADING"
97+
}
4398
}
99+
44100
}

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

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
<!--toggle1-->
1111
<cn.intret.lab.library.LoadingToggleButton
12-
android:id="@+id/toggle1"
12+
android:id="@+id/toggle_rect1"
1313
android:layout_width="50dp"
1414
android:layout_height="25dp"
1515
android:layout_marginLeft="16dp"
@@ -36,20 +36,20 @@
3636
android:gravity="center_vertical"
3737
android:padding="5dp"
3838
android:textColor="@android:color/holo_green_light"
39-
app:layout_constraintBottom_toBottomOf="@+id/toggle1"
40-
app:layout_constraintLeft_toRightOf="@+id/toggle1"
41-
app:layout_constraintTop_toTopOf="@+id/toggle1"
39+
app:layout_constraintBottom_toBottomOf="@+id/toggle_rect1"
40+
app:layout_constraintLeft_toRightOf="@+id/toggle_rect1"
41+
app:layout_constraintTop_toTopOf="@+id/toggle_rect1"
4242
tools:text="it's on"/>
4343

4444
<!--toggle2-->
4545
<cn.intret.lab.library.LoadingToggleButton
46-
android:id="@+id/toggle2"
46+
android:id="@+id/toggle_rect2"
4747
android:layout_width="50dp"
4848
android:layout_height="25dp"
4949
android:layout_marginLeft="16dp"
5050
android:layout_marginTop="16dp"
5151
app:layout_constraintLeft_toLeftOf="parent"
52-
app:layout_constraintTop_toBottomOf="@+id/toggle1"
52+
app:layout_constraintTop_toBottomOf="@+id/toggle_rect1"
5353

5454
app:ltbBackgroundCheckedColor="@color/colorAccent"
5555
app:ltbBackgroundRadius="5dp"
@@ -68,7 +68,7 @@
6868
android:layout_marginLeft="16dp"
6969
android:layout_marginTop="16dp"
7070
app:layout_constraintLeft_toLeftOf="parent"
71-
app:layout_constraintTop_toBottomOf="@id/toggle2"
71+
app:layout_constraintTop_toBottomOf="@id/toggle_rect2"
7272
app:ltbBackgroundCheckedColor="@android:color/holo_purple"
7373
app:ltbBackgroundUncheckedColor="@android:color/darker_gray"
7474
app:ltbChecked="false"
@@ -106,9 +106,9 @@
106106
app:layout_constraintLeft_toRightOf="@+id/toggle_round2"
107107
app:layout_constraintTop_toTopOf="@+id/toggle_round2"/>
108108

109-
<!--toggle 3-->
109+
<!--toggle flicking-->
110110
<cn.intret.lab.library.LoadingToggleButton
111-
android:id="@+id/toggle_round3"
111+
android:id="@+id/toggle_flicking"
112112
android:layout_width="50dp"
113113
android:layout_height="25dp"
114114
android:layout_marginLeft="16dp"
@@ -121,56 +121,79 @@
121121
app:ltbDuration="300"
122122
app:ltbToggleCheckedColor="@android:color/white"
123123
app:ltbToggleIndicatorFlickWhen="toggleToOn"
124-
app:ltbToggleLoadingAnimationType="flick"
125124
app:ltbToggleIndicatorHeight="2dp"
126125
app:ltbToggleIndicatorVisibility="show"
127126
app:ltbToggleIndicatorWidth="8dp"
127+
app:ltbToggleLoadingAnimationType="flick"
128128
app:ltbToggleUncheckedColor="@android:color/white"
129129
/>
130130

131131
<TextView
132+
android:id="@+id/tv_flicking_status"
132133
android:layout_width="wrap_content"
133134
android:layout_height="wrap_content"
134135
android:layout_marginLeft="16dp"
135136
android:text="Indicator Flicking"
136-
app:layout_constraintLeft_toRightOf="@+id/toggle_round3"
137-
app:layout_constraintTop_toTopOf="@+id/toggle_round3"
137+
android:textStyle="bold"
138+
app:layout_constraintBottom_toBottomOf="@id/toggle_flicking"
139+
app:layout_constraintLeft_toRightOf="@+id/toggle_flicking"
140+
app:layout_constraintTop_toTopOf="@+id/toggle_flicking"
138141
/>
139142

140143
<!--Stop flicking-->
141144
<TextView
142145
android:id="@+id/btn_stop_flick"
146+
style="@style/TextButton"
143147
android:layout_width="wrap_content"
144148
android:layout_height="wrap_content"
145-
android:layout_marginRight="16dp"
146-
android:background="?attr/selectableItemBackground"
147149
android:padding="5dp"
148150
android:text="STOP FLICK"
149-
android:textColor="@android:color/holo_green_light"
150-
app:layout_constraintBottom_toBottomOf="@+id/toggle_round3"
151+
app:layout_constraintBottom_toBottomOf="@+id/toggle_flicking"
151152
app:layout_constraintRight_toRightOf="parent"
152-
app:layout_constraintTop_toTopOf="@+id/toggle_round3"
153-
/>
153+
app:layout_constraintTop_toTopOf="@+id/toggle_flicking"/>
154154

155+
<!--loading toggle - line spinner-->
155156
<cn.intret.lab.library.LoadingToggleButton
156157
android:id="@+id/toggle_line_spinner"
157158
android:layout_width="50dp"
158159
android:layout_height="25dp"
159160
android:layout_marginLeft="16dp"
160161
android:layout_marginTop="16dp"
161162
app:layout_constraintLeft_toLeftOf="parent"
162-
app:layout_constraintTop_toBottomOf="@id/toggle_round3"
163+
app:layout_constraintTop_toBottomOf="@id/toggle_flicking"
163164
app:ltbBackgroundCheckedColor="@android:color/holo_purple"
164165
app:ltbBackgroundUncheckedColor="@android:color/darker_gray"
165-
app:ltbChecked="true"
166+
app:ltbChecked="false"
166167
app:ltbDuration="300"
167168
app:ltbToggleCheckedColor="@android:color/white"
168169
app:ltbToggleIndicatorFlickWhen="toggleToOn"
169-
app:ltbToggleLoadingAnimationType="lineSpinner"
170170
app:ltbToggleIndicatorHeight="2dp"
171171
app:ltbToggleIndicatorVisibility="show"
172172
app:ltbToggleIndicatorWidth="8dp"
173+
app:ltbToggleLoadingAnimationType="lineSpinner"
173174
app:ltbToggleUncheckedColor="@android:color/white"
174175
/>
175176

177+
<TextView
178+
android:id="@+id/tv_loading_status"
179+
android:layout_width="wrap_content"
180+
android:layout_height="wrap_content"
181+
android:layout_marginLeft="16dp"
182+
android:text="Indicator Loading Animation"
183+
android:textStyle="bold"
184+
app:layout_constraintBottom_toBottomOf="@id/toggle_line_spinner"
185+
app:layout_constraintLeft_toRightOf="@+id/toggle_line_spinner"
186+
app:layout_constraintTop_toTopOf="@+id/toggle_line_spinner"
187+
/>
188+
189+
<TextView
190+
android:id="@+id/btn_stop_loading"
191+
style="@style/TextButton"
192+
android:layout_width="wrap_content"
193+
android:layout_height="wrap_content"
194+
android:text="STOP LOADING"
195+
app:layout_constraintBottom_toBottomOf="@+id/toggle_line_spinner"
196+
app:layout_constraintRight_toRightOf="parent"
197+
app:layout_constraintTop_toTopOf="@+id/toggle_line_spinner"/>
198+
176199
</android.support.constraint.ConstraintLayout>

‎app/src/main/res/values/styles.xml‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,10 @@
1010
<item name="colorControlHighlight">@color/colorAccent</item>
1111
</style>
1212

13+
<style name="TextButton">
14+
<item name="android:layout_marginRight">16dp</item>
15+
<item name="android:background">?attr/selectableItemBackground</item>
16+
<item name="android:textColor">@android:color/holo_green_light</item>
17+
</style>
18+
1319
</resources>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /