Realized gyroscope
continuous-integration/drone/push Build is passing Details

Gyroscope
Emre KARTAL 2 years ago
parent bdf2b2c7ef
commit 883e021349

@ -1,19 +1,29 @@
package uca.iut.clermont.view package uca.iut.clermont.view
import android.content.Context
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageButton import android.widget.ImageButton
import android.widget.ImageView import android.widget.ImageView
import androidx.core.view.marginStart
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import uca.iut.clermont.R import uca.iut.clermont.R
class StartFragment : Fragment() { class StartFragment : Fragment(), SensorEventListener {
private lateinit var ball: ImageView private lateinit var ball: ImageView
private lateinit var sensorManager: SensorManager
private var accelerometer: Sensor? = null
private var lastUpdate: Long = 0
private var xPosition = 600f
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
@ -24,6 +34,8 @@ class StartFragment : Fragment() {
val view = inflater.inflate(R.layout.fragment_start, container, false) val view = inflater.inflate(R.layout.fragment_start, container, false)
ball = view.findViewById(R.id.ball) ball = view.findViewById(R.id.ball)
sensorManager = activity?.getSystemService(Context.SENSOR_SERVICE) as SensorManager
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
val buttonFavorite = view.findViewById<ImageButton>(R.id.nextButton) val buttonFavorite = view.findViewById<ImageButton>(R.id.nextButton)
@ -34,5 +46,54 @@ class StartFragment : Fragment() {
return view return view
} }
override fun onResume() {
super.onResume()
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_UI)
lastUpdate = System.currentTimeMillis()
}
override fun onPause() {
super.onPause()
sensorManager.unregisterListener(this)
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
// not used
}
override fun onSensorChanged(event: SensorEvent?) {
if (event?.sensor?.type == Sensor.TYPE_ACCELEROMETER) {
val curTime = System.currentTimeMillis()
if ((curTime - lastUpdate) > 10) {
val x = event.values[0] * 6f
val width = ball.width
val margin = ball.marginStart
val maxXPosition = (ball.parent as View).width - width - margin.toFloat()
val newXPosition = xPosition - x
if (newXPosition < 0) {
xPosition = 0f
ball.clearAnimation()
} else if (newXPosition > maxXPosition) {
xPosition = maxXPosition
ball.clearAnimation()
} else {
xPosition = newXPosition
}
val rotation = x * 5
ball.post {
val rotationDirection = if (x > 0) -1 else 1
ball.rotation = ball.rotation + rotationDirection * rotation
}
ball.x = xPosition
lastUpdate = curTime
ball.animate().x(xPosition)
}
}
}
} }

Loading…
Cancel
Save