Pull to Swipe Refresh Layout is a gesture that is being used in a lot of popular apps, apps where content updates are frequent, like news, social media e.t.c. In Android development this gesture it’s called ‘Swipe to Refresh‘
Methods are:
– setOnRefreshListener(OnRefreshListener): adds a listener to let other parts of the code know when refreshing begins.
– setRefreshing(boolean): enables or disables progress visibility.
– isRefreshing(): checks whether the view is refreshing.
– setColorScheme(): it receive four different colors that will be used to colorize the animation.
MainActivity.kt
package com.cfsuman.kotlinexamples
import android.graphics.Color
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*
class MainActivity : AppCompatActivity() {
private lateinit var mRandom:Random
private lateinit var mHandler: Handler
private lateinit var mRunnable:Runnable
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialize a new Random instance
mRandom = Random()
// Initialize the handler instance
mHandler = Handler()
// Set an on refresh listener for swipe refresh layout
swipe_refresh_layout.setOnRefreshListener {
// Initialize a new Runnable
mRunnable = Runnable {
// Update the text view text with a random number
text_view.text = "Refresh and get random number ${mRandom.nextInt(500)}"
// Change the text view text color with a random color
text_view.setTextColor(randomHSVColor())
// Hide swipe to refresh icon animation
swipe_refresh_layout.isRefreshing = false
}
// Execute the task after specified time
mHandler.postDelayed(
mRunnable,
(randomInRange(1,5)*1000).toLong() // Delay 1 to 5 seconds
)
}
}
// Custom method to generate random HSV color
fun randomHSVColor(): Int {
// Generate a random hue value between 0 to 360
val hue = mRandom.nextInt(361)
// We make the color depth full
val saturation = 1.0f
// We make a full bright color
val value = 1.0f
// We avoid color transparency
val alpha = 255
// Finally, generate the color
// Return the color
return Color.HSVToColor(alpha, floatArrayOf(hue.toFloat(), saturation, value))
}
// Custom method to get a random number from the provided range
private fun randomInRange(min:Int, max:Int):Int{
// Define a new Random class
val r = Random()
// Get the next random number within range
// Including both minimum and maximum number
return r.nextInt((max - min) + 1) + min;
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#edf9ee"
>
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Swipe to refresh me"
android:textSize="50sp"
/>
</android.support.v4.widget.SwipeRefreshLayout>
Output