I want to get value from seekbar.progress of three seekbar for control RGB.
I have Red seekbar , Green seekBar and Blue seekbar and I want that when I drag red seekbar and green and blue ,
I want to set Background for an image view that use value of seekbar . I want use this values for set background that Combination of three color .
I'm write the paint function for get three values of my seekbar and set a color for my image view background;
My SeekbarManger class is this :
class SeekBarManager() {
}
fun seekBarManage(context: Context, seekBar: SeekBar) {
seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) { }
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {
MainActivity.getSeekBarProgress(context , seekBar)
}
})
}
fun paint(view: View, red: Int, green:Int, blue:Int){
fun View.getLocationOnScreen(): Point
{
val location = IntArray(2)
this.getLocationOnScreen(location)
return Point(location[0],location[1])
}
val location = view.getLocationOnScreen()
val absX = location.x
val absY = location.y
val bitmap = Bitmap.createBitmap(absX , absY , Bitmap.Config.RGB_565)
val canvas = Canvas(bitmap)
canvas.drawRGB(red , green , blue )
view.background = BitmapDrawable(view.resources , bitmap)
}
and my MainActivity is This:
open class MainActivity : AppCompatActivity() {
companion object {
fun getSeekBarProgress(context: Context , seekBar: SeekBar){
val result = seekBar.progress
Toast.makeText(context, "Progress is: $result%", Toast.LENGTH_SHORT).show()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val seekRed = findViewById<SeekBar>(R.id.seekBar_red)
val seekGreen = findViewById<SeekBar>(R.id.seekBar_green)
val seekBlue = findViewById<SeekBar>(R.id.seekBar_blue)
val seekEndRed = seekBarManage(this , seekRed)
val seekEndGreen = seekBarManage(this , seekGreen)
val seekEndBlue = seekBarManage(this , seekBlue)
paint(color_output , seekEndRed , seekEndGreen , seekEndBlue)
}
}
You should pass seekbars and view objects to SeekbarManager Class and then pass them to Companion object like below :
open class MainActivity : AppCompatActivity() {
companion object {
fun getSeekBarProgress(
seekBarRed: SeekBar,
seekBarGreen: SeekBar,
seekBarBlue: SeekBar,
view: View
) {
paint(view, seekBarRed.progress, seekBarGreen.progress, seekBarBlue.progress)
}
private fun paint(view: View, red: Int, green: Int, blue: Int) {
fun View.getLocationOnScreen(): Point {
val location = IntArray(2)
this.getLocationOnScreen(location)
return Point(location[0], location[1])
}
val location = view.getLocationOnScreen()
val absX = location.x
val absY = location.y
val bitmap = Bitmap.createBitmap(absX, absY, Bitmap.Config.RGB_565)
val canvas = Canvas(bitmap)
canvas.drawRGB(red, green, blue)
view.background = BitmapDrawable(view.resources, bitmap)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val colorOutput = findViewById<View>(R.id.color_output)
val seekRed = findViewById<SeekBar>(R.id.seekBar_red)
val seekGreen = findViewById<SeekBar>(R.id.seekBar_green)
val seekBlue = findViewById<SeekBar>(R.id.seekBar_blue)
seekBarManage(seekRed, seekGreen, seekBlue, colorOutput)
}
}
and
class SeekBarManager() {
}
fun seekBarManage(
seekBarRed: SeekBar,
seekBarGreen: SeekBar,
seekBarBlue: SeekBar,
view: View
) {
seekBarRed.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {}
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {
MainActivity.getSeekBarProgress(seekBarRed, seekBarGreen, seekBarBlue, view)
}
})
seekBarGreen.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {}
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {
MainActivity.getSeekBarProgress(seekBarRed, seekBarGreen, seekBarBlue, view)
}
})
seekBarBlue.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {}
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {
MainActivity.getSeekBarProgress(seekBarRed, seekBarGreen, seekBarBlue, view)
}
})
}
and better way is to just do all these in MainActivity and there is no need for SeekBarManager Class, like below:
open class MainActivity : AppCompatActivity() {
lateinit var colorOutput: View
lateinit var seekRed: SeekBar
lateinit var seekGreen: SeekBar
lateinit var seekBlue: SeekBar
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
colorOutput = findViewById<View>(R.id.color_output)
seekRed = findViewById<SeekBar>(R.id.seekBar_red)
seekGreen = findViewById<SeekBar>(R.id.seekBar_green)
seekBlue = findViewById<SeekBar>(R.id.seekBar_blue)
seekRed.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {}
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {
paint()
}
})
seekGreen.setOnSeekBarChangeListener(
object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {}
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {
paint()
}
})
seekBlue.setOnSeekBarChangeListener(
object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {}
override fun onStartTrackingTouch(p0: SeekBar?) {}
override fun onStopTrackingTouch(p0: SeekBar?) {
paint()
}
})
}
private fun paint() {
val view = colorOutput
val red = seekRed.progress
val green = seekGreen.progress
val blue = seekBlue.progress
fun View.getLocationOnScreen(): Point {
val location = IntArray(2)
this.getLocationOnScreen(location)
return Point(location[0], location[1])
}
val location = view.getLocationOnScreen()
val absX = location.x
val absY = location.y
val bitmap = Bitmap.createBitmap(absX, absY, Bitmap.Config.RGB_565)
val canvas = Canvas(bitmap)
canvas.drawRGB(red, green, blue)
view.background = BitmapDrawable(view.resources, bitmap)
}
}