Advertisement
tuomasvaltanen

Untitled

Apr 14th, 2023 (edited)
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.61 KB | None | 0 0
  1. // Edistynyt mobiiliohjelmointi, 14.4.2023
  2.  
  3. // lokalisointi
  4.  
  5. Android Studio vasen ylänurkka -> Vaihda 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 avata minkä vain strings.xml-tiedoston, ja klikata oikeasta ylänurkasta "Open editor".
  13.  
  14. Jos editori sekoilee, Clean project -> Rebuild project.
  15.  
  16. Tehdään uusi käännös nimeltä "greeting_text", arvoiksi:
  17.  
  18. Default: Welcome!
  19. English: Welcome!
  20. Finnish: Tervetuloa!
  21.  
  22. Ja kokeillaan käyttää esim. HomeFragmentissa:
  23.  
  24. <TextView
  25. android:layout_width="wrap_content"
  26. android:layout_height="wrap_content"
  27. android:layout_margin="20dp"
  28. android:text="@string/greeting_text"
  29. android:textSize="30sp"
  30. android:textStyle="bold"
  31. app:layout_constraintEnd_toEndOf="parent"
  32. app:layout_constraintStart_toStartOf="parent"
  33. app:layout_constraintTop_toTopOf="parent" />
  34.  
  35. Nyt jos emulaattorissa vaihtaa asetuksista kielen suomeksi, vaihtuu myös tervetuloteksti ulkoasussa.
  36.  
  37. // tehdään myös uusi kansio res-kansioon -> layout-sw720dp , ja kopioidaan sinne fragment_home.xml.
  38. // idea on se että tehdään tästä fragmentista oma versio isoille tableteille (yli 10" näyttö)
  39.  
  40. // tehdään tabletin ulkoasuun isompi teksti, kursivoituna ja eri värisenä:
  41.  
  42. <TextView
  43. android:layout_width="wrap_content"
  44. android:layout_height="wrap_content"
  45. android:layout_margin="20dp"
  46. android:text="@string/greeting_text"
  47. android:textColor="#2BAABA"
  48. android:textSize="140sp"
  49. android:textStyle="bold|italic"
  50. app:layout_constraintEnd_toEndOf="parent"
  51. app:layout_constraintStart_toStartOf="parent"
  52. app:layout_constraintTop_toTopOf="parent" />
  53.  
  54.  
  55. #######################################
  56. AA CHART KOTLIN -testailua
  57. #######################################
  58.  
  59. https://github.com/AAChartModel/AAChartCore-Kotlin
  60.  
  61. jitpack pitää löyty settings.gradlesta (ks. viewien kustomointi -luentojen muistiinpanot)
  62.  
  63. Ohjeen mukaan import:
  64.  
  65. implementation 'com.github.AAChartModel:AAChartCore-Kotlin:-SNAPSHOT'
  66.  
  67. Ei näemmä toimi enää, kokeillaan:
  68.  
  69. implementation 'com.github.AAChartModel:AAChartCore-Kotlin:7.2.0'
  70.  
  71. Tehdään tälle oma fragmentti, esim. ChartTestFragment , päävalikkoon myös. binding layer käyttöön.
  72.  
  73. esim.
  74.  
  75. class ChartTestFragment : Fragment() {
  76. // change this to match your fragment name
  77. private var _binding: FragmentChartTestBinding? = null
  78.  
  79. // This property is only valid between onCreateView and
  80. // onDestroyView.
  81. private val binding get() = _binding!!
  82.  
  83. override fun onCreateView(
  84. inflater: LayoutInflater,
  85. container: ViewGroup?,
  86. savedInstanceState: Bundle?
  87. ): View? {
  88. _binding = FragmentChartTestBinding.inflate(inflater, container, false)
  89. val root: View = binding.root
  90.  
  91.  
  92. // the binding -object allows you to access views in the layout, textviews etc.
  93.  
  94. return root
  95. }
  96.  
  97. override fun onDestroyView() {
  98. super.onDestroyView()
  99. _binding = null
  100. }
  101. }
  102.  
  103. Ohjeen mukaan, lisätään ChartTestFragmentin ulkoasuun myös AAChartView:
  104.  
  105. <?xml version="1.0" encoding="utf-8"?>
  106. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  107. xmlns:tools="http://schemas.android.com/tools"
  108. android:layout_width="match_parent"
  109. android:layout_height="match_parent"
  110. tools:context=".ChartTestFragment">
  111.  
  112. <com.github.aachartmodel.aainfographics.aachartcreator.AAChartView
  113. android:id="@+id/aa_chart_view"
  114. android:layout_width="match_parent"
  115. android:layout_height="match_parent">
  116.  
  117. </com.github.aachartmodel.aainfographics.aachartcreator.AAChartView>
  118.  
  119. </FrameLayout>
  120.  
  121. // kokeillaan ChartTestFragmentin onCreateViewissä AAChartin toimivuutta:
  122.  
  123. override fun onCreateView(
  124. inflater: LayoutInflater,
  125. container: ViewGroup?,
  126. savedInstanceState: Bundle?
  127. ): View? {
  128. _binding = FragmentChartTestBinding.inflate(inflater, container, false)
  129. val root: View = binding.root
  130.  
  131. val aaChartModel : AAChartModel = AAChartModel()
  132. .chartType(AAChartType.Area)
  133. .title("Sääasema / Ruotsi")
  134. .subtitle("Mittaukset")
  135. .dataLabelsEnabled(true)
  136. .series(arrayOf(
  137. AASeriesElement()
  138. .name("Tokyo")
  139. .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)),
  140. AASeriesElement()
  141. .name("NewYork")
  142. .data(arrayOf(0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5)),
  143. AASeriesElement()
  144. .name("London")
  145. .data(arrayOf(0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0)),
  146. AASeriesElement()
  147. .name("Berlin")
  148. .data(arrayOf(3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8))
  149. )
  150. )
  151.  
  152. binding.aaChartView.aa_drawChartWithChartModel(aaChartModel)
  153.  
  154. // the binding -object allows you to access views in the layout, textviews etc.
  155.  
  156. return root
  157. }
  158.  
  159.  
  160. // versio 2, tehdään lista mikä pitää kirjaa lämpötiloista:
  161.  
  162. // This property is only valid between onCreateView and
  163. // onDestroyView.
  164. private val binding get() = _binding!!
  165.  
  166. // tehdään lista, johon voidaan kerätä lämpötiloja
  167. val temperatureList = mutableListOf<Double>()
  168.  
  169. override fun onCreateView(
  170. inflater: LayoutInflater,
  171. container: ViewGroup?,
  172. savedInstanceState: Bundle?
  173. ): View? {
  174. _binding = FragmentChartTestBinding.inflate(inflater, container, false)
  175. val root: View = binding.root
  176.  
  177. temperatureList.add(3.5)
  178. temperatureList.add(4.7)
  179. temperatureList.add(2.9)
  180. temperatureList.add(6.7)
  181. temperatureList.add(12.6)
  182.  
  183. val aaChartModel : AAChartModel = AAChartModel()
  184. .chartType(AAChartType.Line)
  185. .title("Sääasema / Ruotsi")
  186. .subtitle("Mittaukset")
  187. .dataLabelsEnabled(true)
  188. .series(arrayOf(
  189. AASeriesElement()
  190. .name("Lämpötila")
  191. .data(temperatureList.toTypedArray())
  192. )
  193. )
  194.  
  195. binding.aaChartView.aa_drawChartWithChartModel(aaChartModel)
  196.  
  197. // the binding -object allows you to access views in the layout, textviews etc.
  198.  
  199. return root
  200. }
  201.  
  202. // säädetään myös ylä- ja alaraja chartille:
  203.  
  204. // tehdään ChartModel, lämpötilan takia ylä- ja alaraja -40 -> 40
  205. val aaChartModel : AAChartModel = AAChartModel()
  206. .chartType(AAChartType.Line)
  207. .title("Sääasema / Ruotsi")
  208. .subtitle("Mittaukset")
  209. .yAxisMin(-40)
  210. .yAxisMax(40)
  211. .dataLabelsEnabled(true)
  212. .series(arrayOf(
  213. AASeriesElement()
  214. .name("Lämpötila")
  215. .data(temperatureList.toTypedArray())
  216. )
  217. )
  218.  
  219.  
  220. // jos kytketään tämä esim. sääasemadataan (MQTT), voidaan tehdä esim. nyt näin:
  221.  
  222. try {
  223. var item : WeatherStation = gson.fromJson(result, WeatherStation::class.java)
  224.  
  225. // speedviewiä varten haetaan Float-muodossa lämpötila
  226. var temperature = item.d.get1().v.toDouble()
  227.  
  228. // poistetaan ylimenevät numerot,
  229. // ettei lista kasva isommaksi kuin 12 numeroa
  230. while(temperatureList.size >= 12) {
  231. temperatureList.removeAt(0)
  232. }
  233.  
  234. // lisätään lämpötila näkymään
  235. temperatureList.add(temperature)
  236.  
  237. // tehdään AAChartin data uusiksi
  238. var newArray = arrayOf(
  239. AASeriesElement()
  240. .name("Lämpötila")
  241. .data(temperatureList.toTypedArray())
  242. )
  243.  
  244. // ajetaan binding-layeria koskevat asia UI-threadissa erikseen
  245. activity?.runOnUiThread(java.lang.Runnable {
  246. // päivitetään AAChartin data
  247. binding.aaChartView.aa_onlyRefreshTheChartDataWithChartOptionsSeriesArray(newArray, false)
  248. })
  249. }
  250. catch (e : Exception) {
  251. Log.d("ADVTECH", e.message.toString())
  252. }
  253.  
  254. // jos halutaan useampaa arvoa seurata:
  255.  
  256. // tehdään listat, johon voidaan kerätä arvoja
  257. val temperatureList = mutableListOf<Double>()
  258. val humidityList = mutableListOf<Double>()
  259.  
  260.  
  261. onCreateView:
  262.  
  263. // tehdään ChartModel, lämpötilan takia ylä- ja alaraja -40 -> 40
  264. val aaChartModel : AAChartModel = AAChartModel()
  265. .chartType(AAChartType.Line)
  266. .title("Sääasema / Ruotsi")
  267. .subtitle("Mittaukset")
  268. .yAxisMin(-40)
  269. .yAxisMax(110)
  270. .dataLabelsEnabled(true)
  271. .series(arrayOf(
  272. AASeriesElement()
  273. .name("Lämpötila")
  274. .data(temperatureList.toTypedArray()),
  275. AASeriesElement()
  276. .name("Kosteus")
  277. .data(humidityList.toTypedArray()),
  278. AASeriesElement()
  279. .name("Ilmanpaine")
  280. .data(pressureList.toTypedArray())
  281. )
  282. )
  283.  
  284. binding.aaChartView.aa_drawChartWithChartModel(aaChartModel)
  285.  
  286. subscribe-koodissa:
  287.  
  288. // speedviewiä varten haetaan Float-muodossa lämpötila
  289. var temperature = item.d.get1().v.toDouble()
  290. var humidity = item.d.get3().v.toDouble()
  291.  
  292.  
  293. // poistetaan ylimenevät numerot,
  294. // ettei lista kasva isommaksi kuin 12 numeroa
  295. while(temperatureList.size >= 12) {
  296. temperatureList.removeAt(0)
  297. }
  298.  
  299. // poistetaan ylimenevät numerot,
  300. // ettei lista kasva isommaksi kuin 12 numeroa
  301. while(humidityList.size >= 12) {
  302. humidityList.removeAt(0)
  303. }
  304.  
  305.  
  306.  
  307. // lisätään lämpötila näkymään
  308. temperatureList.add(temperature)
  309. humidityList.add(humidity)
  310.  
  311.  
  312. // tehdään AAChartin data uusiksi
  313. var newArray = arrayOf(
  314. AASeriesElement()
  315. .name("Lämpötila")
  316. .data(temperatureList.toTypedArray()),
  317. AASeriesElement()
  318. .name("Kosteus")
  319. .data(humidityList.toTypedArray())
  320. )
  321.  
  322. // ajetaan binding-layeria koskevat asia UI-threadissa erikseen
  323. activity?.runOnUiThread(java.lang.Runnable {
  324. // päivitetään AAChartin data
  325. binding.aaChartView.aa_onlyRefreshTheChartDataWithChartOptionsSeriesArray(newArray, false)
  326. })
  327.  
  328. // jos haluat lisätä zoomaustuen ChartModeliin, kokeile lisätä luontivaiheessa:
  329.  
  330. .zoomType(AAChartZoomType.Y)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement