first commit
This commit is contained in:
commit
417e54da96
5696 changed files with 900003 additions and 0 deletions
Binary file not shown.
|
@ -0,0 +1,3 @@
|
|||
title=Compass
|
||||
author=Nik Klever
|
||||
orientation=portrait
|
25
kivy_venv/share/kivy-examples/android/compass/compass.kv
Normal file
25
kivy_venv/share/kivy-examples/android/compass/compass.kv
Normal file
|
@ -0,0 +1,25 @@
|
|||
#:kivy 1.7.0
|
||||
|
||||
FloatLayout:
|
||||
|
||||
canvas:
|
||||
Color:
|
||||
rgb: .98, .98, .98
|
||||
Rectangle:
|
||||
size: self.size
|
||||
|
||||
Image:
|
||||
source: 'rose.png'
|
||||
|
||||
Image:
|
||||
source: 'needle.png'
|
||||
|
||||
canvas.before:
|
||||
PushMatrix
|
||||
Rotate:
|
||||
angle: app.needle_angle
|
||||
axis: 0, 0, 1
|
||||
origin: self.center
|
||||
|
||||
canvas.after:
|
||||
PopMatrix
|
77
kivy_venv/share/kivy-examples/android/compass/main.py
Normal file
77
kivy_venv/share/kivy-examples/android/compass/main.py
Normal file
|
@ -0,0 +1,77 @@
|
|||
'''
|
||||
Compass example
|
||||
===============
|
||||
|
||||
This example is a demonstration of Hardware class usage.
|
||||
But it has severals drawbacks, like using only the magnetic sensor, and
|
||||
extrapolating values to get the orientation. The compass is absolutely not
|
||||
accurate.
|
||||
|
||||
The right way would be to get the accelerometer + magnetic, and computer
|
||||
everything according to the phone orientation. This is not the purpose of this
|
||||
example right now.
|
||||
|
||||
You can compile it with::
|
||||
|
||||
./build.py --package org.test.compass --name compass \
|
||||
--private ~/code/kivy/examples/android/compass \
|
||||
--window --version 1.0 debug installd
|
||||
'''
|
||||
|
||||
|
||||
import kivy
|
||||
kivy.require('1.7.0')
|
||||
|
||||
from jnius import autoclass
|
||||
from math import floor
|
||||
from kivy.app import App
|
||||
from kivy.properties import NumericProperty
|
||||
from kivy.clock import Clock
|
||||
from kivy.vector import Vector
|
||||
from kivy.animation import Animation
|
||||
|
||||
Hardware = autoclass('org.renpy.android.Hardware')
|
||||
|
||||
|
||||
class CompassApp(App):
|
||||
|
||||
needle_angle = NumericProperty(0)
|
||||
|
||||
def build(self):
|
||||
self._anim = None
|
||||
Hardware.magneticFieldSensorEnable(True)
|
||||
Clock.schedule_interval(self.update_compass, 1 / 10.)
|
||||
|
||||
def update_compass(self, *args):
|
||||
# read the magnetic sensor from the Hardware class
|
||||
(x, y, z) = Hardware.magneticFieldSensorReading()
|
||||
|
||||
# calculate the angle
|
||||
needle_angle = Vector(x, y).angle((0, 1)) + 90.
|
||||
|
||||
# fix animation transition around the unit circle
|
||||
if (self.needle_angle % 360) - needle_angle > 180:
|
||||
needle_angle += 360
|
||||
elif (self.needle_angle % 360) - needle_angle < -180:
|
||||
needle_angle -= 360
|
||||
# add the number of revolutions to the result
|
||||
needle_angle += 360 * floor(self.needle_angle / 360.)
|
||||
|
||||
# animate the needle
|
||||
if self._anim:
|
||||
self._anim.stop(self)
|
||||
self._anim = Animation(needle_angle=needle_angle, d=.2, t='out_quad')
|
||||
self._anim.start(self)
|
||||
|
||||
def on_pause(self):
|
||||
# when you are going on pause, don't forget to stop the sensor
|
||||
Hardware.magneticFieldSensorEnable(False)
|
||||
return True
|
||||
|
||||
def on_resume(self):
|
||||
# reactivate the sensor when you are back to the app
|
||||
Hardware.magneticFieldSensorEnable(True)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
CompassApp().run()
|
BIN
kivy_venv/share/kivy-examples/android/compass/needle.png
Normal file
BIN
kivy_venv/share/kivy-examples/android/compass/needle.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.4 KiB |
BIN
kivy_venv/share/kivy-examples/android/compass/rose.png
Normal file
BIN
kivy_venv/share/kivy-examples/android/compass/rose.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 31 KiB |
Loading…
Add table
Add a link
Reference in a new issue