Advertisement
tuomasvaltanen

Untitled

Mar 30th, 2023 (edited)
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.14 KB | None | 0 0
  1. // Edistynyt mobiiliohjelmointi, 30.3.2023
  2.  
  3. // lokalisaatiot
  4.  
  5. Android Studiosta vasen ylänurkka -> Android-näkymä -> Project-näkymäksi
  6.  
  7. Tehdään app -> src -> main -> res -kansioon kaksi uutta kansiota:
  8.  
  9. values-en
  10. values-fi
  11.  
  12. Kopioidaan values-kansion strings.xml kumpaankin kansioon pohjaksi. Tämän jälkeen voit valita minkä tahansa values.xml tiedoston, ja klikata oikeasta ylänurkasta "Open Editor". Tee uusi käännös id:llä greeting_text -> arvo englanniksi "Welcome!" ja Suomeksi "Tervetuloa!"
  13.  
  14. Kokeillaan greeting_textiä esim. TextViewissä ja HomeFragmentissa:
  15.  
  16. <TextView
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:layout_marginTop="10dp"
  20. android:text="@string/greeting_text"
  21. android:textSize="32sp"
  22. android:textStyle="bold"
  23. app:layout_constraintEnd_toEndOf="parent"
  24. app:layout_constraintStart_toStartOf="parent"
  25. app:layout_constraintTop_toTopOf="parent" />
  26.  
  27. Tämän jälkeen Welcome-tekstin pitäisi muuttua jos vaihdat emulaattorin kieleksi suomen.
  28.  
  29. // tehdään myös erikoiskansio 10" -tablettien ulkoasulle -> layout-sw720dp , ja kopioidaan fragment_home.xml sinne. Muutetaan Welcome-textview isommaksi, eri väriseksi ja kursivoiduksi:
  30.  
  31.  
  32. <TextView
  33. android:layout_width="wrap_content"
  34. android:layout_height="wrap_content"
  35. android:layout_marginTop="10dp"
  36. android:text="@string/greeting_text"
  37. android:textColor="#B159E1"
  38. android:textSize="140sp"
  39. android:textStyle="bold|italic"
  40. app:layout_constraintEnd_toEndOf="parent"
  41. app:layout_constraintStart_toStartOf="parent"
  42. app:layout_constraintTop_toTopOf="parent" />
  43.  
  44.  
  45. Jos nyt kokeilet käyttää sovellusta 10" -tabletin emulaattorilla, huomaat että se käyttää tätä erikseen 10" -tableteille tehtyä ulkoasua.
  46.  
  47. ######################################################################
  48. AAChart-Kotlin -plugin, testailua
  49.  
  50. https://github.com/AAChartModel/AAChartCore-Kotlin
  51. ######################################################################
  52.  
  53. import vaatii jitpack.io:n settings.gradleen, sen jälkeen import normaalisti:
  54.  
  55. implementation 'com.github.AAChartModel:AAChartCore-Kotlin:-SNAPSHOT'
  56.  
  57. Tätä testaamista varten tehtiin oma fragment: ChartFragment, lisättiin päävalikkoon ja otettiin binding layer käyttöön
  58.  
  59. Frgmentin ulkoasuun tarvitaan chartin xml:
  60.  
  61. <com.github.aachartmodel.aainfographics.aachartcreator.AAChartView
  62. android:id="@+id/aa_chart_view"
  63. android:layout_width="match_parent"
  64. android:layout_height="match_parent">
  65.  
  66. </com.github.aachartmodel.aainfographics.aachartcreator.AAChartView>
  67.  
  68. Fragmentissa, voidaan esim lisätä listaan numeroita ja piirtää se charttiin:
  69.  
  70. val temperatureList = mutableListOf<Double>()
  71.  
  72. override fun onCreateView(
  73. inflater: LayoutInflater,
  74. container: ViewGroup?,
  75. savedInstanceState: Bundle?
  76. ): View? {
  77. _binding = FragmentChartBinding.inflate(inflater, container, false)
  78. val root: View = binding.root
  79.  
  80. // the binding -object allows you to access views in the layout, textviews etc.
  81.  
  82. // jos kytket tämän reaaliaikaiseen sääasemadataan, kommentoi nämä esimerkkidatarivit pois
  83. temperatureList.add(5.5)
  84. temperatureList.add(4.5)
  85. temperatureList.add(7.5)
  86. temperatureList.add(3.5)
  87. temperatureList.add(4.5)
  88. temperatureList.add(6.5)
  89. temperatureList.add(9.5)
  90. temperatureList.add(11.5)
  91.  
  92. // .data(arrayOf(7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6))
  93.  
  94. val aaChartModel : AAChartModel = AAChartModel()
  95. .chartType(AAChartType.Line)
  96. .title("MQTT Weather Station")
  97. .subtitle("Sweden")
  98. .dataLabelsEnabled(true)
  99. .series(arrayOf(
  100. AASeriesElement()
  101. .name("Tokyo")
  102. .data(temperatureList.toTypedArray())
  103. )
  104. )
  105.  
  106. //The chart view object calls the instance object of AAChartModel and draws the final graphic
  107. binding.aaChartView.aa_drawChartWithChartModel(aaChartModel)
  108.  
  109. return root
  110. }
  111.  
  112. ###################################################################################
  113. testi, sääasemadata ja Chart
  114.  
  115. Tässä testissä kopioitiin MQTT-logiikka WeatherStationFragmentista -> ChartFragment
  116. ###################################################################################
  117.  
  118. ///////////////////////////
  119. // VERSIO 1: yksi graafi
  120. ///////////////////////////
  121.  
  122. // luodaan tyhjä lista mittauslukuja varten
  123. val temperatureList = mutableListOf<Double>()
  124.  
  125. onCreateView:
  126.  
  127. val aaChartModel : AAChartModel = AAChartModel()
  128. .chartType(AAChartType.Line)
  129. .title("MQTT Weather Station")
  130. .subtitle("Sweden")
  131. .dataLabelsEnabled(true)
  132. .series(arrayOf(
  133. AASeriesElement()
  134. .name("Temperature")
  135. .data(temperatureList.toTypedArray())
  136. )
  137. )
  138.  
  139. //The chart view object calls the instance object of AAChartModel and draws the final graphic
  140. binding.aaChartView.aa_drawChartWithChartModel(aaChartModel)
  141.  
  142. // kun MQTT-data tulee:
  143.  
  144. var item : WeatherStation = gson.fromJson(result, WeatherStation::class.java)
  145.  
  146. // haetaan lämpötila WeatherStation-objektin kautta
  147. var temperature = item.d.get1().v.toDouble()
  148.  
  149. // jos liikaa tavaraa listassa, poistetaan ylimääräiset (raja = 12)
  150. while(temperatureList.size >= 12) {
  151. temperatureList.removeAt(0)
  152. }
  153.  
  154. // lisätään uusi lämpötila listaan
  155. temperatureList.add(temperature)
  156.  
  157. // luodaan Temperature-array AAChartia varten
  158. var newArray = arrayOf(
  159. AASeriesElement()
  160. .name("Temperature")
  161. .data(temperatureList.toTypedArray())
  162. )
  163.  
  164. // päivitetään chart käyttöliittymään
  165. activity?.runOnUiThread(java.lang.Runnable {
  166. // aseta charttiin
  167. binding.aaChartView.aa_onlyRefreshTheChartDataWithChartOptionsSeriesArray(newArray, false)
  168. })
  169.  
  170. ///////////////////////////
  171. // VERSIO 2: kaksi graafia
  172. ///////////////////////////
  173. // luodaan tyhjät listat mittauslukuja varten
  174. val temperatureList = mutableListOf<Double>()
  175. val pressureList = mutableListOf<Double>()
  176.  
  177. onCreateView:
  178.  
  179. val aaChartModel : AAChartModel = AAChartModel()
  180. .chartType(AAChartType.Line)
  181. .title("MQTT Weather Station")
  182. .subtitle("Sweden")
  183. .dataLabelsEnabled(true)
  184. .series(arrayOf(
  185. AASeriesElement()
  186. .name("Temperature")
  187. .data(temperatureList.toTypedArray()),
  188.  
  189. AASeriesElement()
  190. .name("Pressure")
  191. .data(pressureList.toTypedArray())
  192. )
  193. )
  194.  
  195. //The chart view object calls the instance object of AAChartModel and draws the final graphic
  196. binding.aaChartView.aa_drawChartWithChartModel(aaChartModel)
  197.  
  198.  
  199. // kun MQTT-data tulee:
  200.  
  201. var item : WeatherStation = gson.fromJson(result, WeatherStation::class.java)
  202.  
  203. // haetaan lämpötila WeatherStation-objektin kautta
  204. // haetaan myös ilmanpaine
  205. var temperature = item.d.get1().v.toDouble()
  206. var pressure = item.d.get2().v.toDouble()
  207.  
  208. // jos liikaa tavaraa listassa, poistetaan ylimääräiset (raja = 12)
  209. while(temperatureList.size >= 12) {
  210. temperatureList.removeAt(0)
  211. }
  212.  
  213. // jos liikaa tavaraa listassa, poistetaan ylimääräiset (raja = 12)
  214. while(pressureList.size >= 12) {
  215. pressureList.removeAt(0)
  216. }
  217.  
  218. // lisätään uusi lämpötila ja pressure listaan
  219. temperatureList.add(temperature)
  220. pressureList.add(pressure)
  221.  
  222. // luodaan Temperature- ja Pressure-array AAChartia varten
  223. var newArray = arrayOf(
  224. AASeriesElement()
  225. .name("Temperature")
  226. .data(temperatureList.toTypedArray()),
  227. AASeriesElement()
  228. .name("Pressure")
  229. .data(pressureList.toTypedArray())
  230. )
  231.  
  232. // päivitetään chart käyttöliittymään
  233. activity?.runOnUiThread(java.lang.Runnable {
  234. // aseta charttiin
  235. binding.aaChartView.aa_onlyRefreshTheChartDataWithChartOptionsSeriesArray(newArray, false)
  236. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement