iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
1

在手機上有許多不同的感應器,例如陀螺儀、加速計、重力傳感器、磁場感測器等

透過SensorManager,可以向不同的感應器取得相對應的數值,這次透過Accelerometer(加速度感應器)判斷手機是否被搖晃

Method

為了防止圖片在搖晃過程中不斷改變,先設置一個變數,依照這個變數作為是否要更換圖片的依據

private var isReplaceable = true
fun changeImage() {
    if(isReplaceable) {
        isReplaceable = false
        //使用亂數決定更換成哪張圖片
        when((Math.random()*6).toInt()){
            0 -> imageView.setImageResource(R.drawable.one)
            1 -> imageView.setImageResource(R.drawable.two)
            2 -> imageView.setImageResource(R.drawable.three)
            3 -> imageView.setImageResource(R.drawable.four)
            4 -> imageView.setImageResource(R.drawable.five)
            else -> imageView.setImageResource(R.drawable.six)
        }
    //啟動Thread
    thread()
}

利用Thread延遲1秒,再將isReplaceable設為true

fun thread(){
    Thread(Runnable {
        //延遲1秒
        Thread.sleep(1000)
        //讓圖片可以再次更換
        isReplaceable = true
    }).start()
}

建立RegisterListener接收得到的數據

val sensorListener = object: SensorEventListener {
    override fun onAccuracyChanged(p0: Sensor?, p1: Int) {}
    override fun onSensorChanged(event: SensorEvent?) {
        if(event != null){
            //取得個三軸的加速度
            val xValue = Math.abs(event.values[0])
            val yValue = Math.abs(event.values[1])
            val zValue = Math.abs(event.values[2])
            if (xValue > 15 || yValue > 15 || zValue > 15) {
                //當被搖晃時改變圖片
                changeImage()
            }
        }
    }
}

取得SensorManager

val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)

sensorManager.registerListener(sensorListener, sensor, SensorManager.SENSOR_DELAY_NORMAL)

實作成果


上一篇
Day 24 DatePickerDialog
下一篇
Day 26 影片撥放(VideoView)
系列文
高中生Kotlin實作30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言