Home > OS >  How to get value of ssekbar.progress and use it on another function
How to get value of ssekbar.progress and use it on another function

Time:01-21

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)


    }


}

CodePudding user response:

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)
    }
}
  •  Tags:  
  • Related