Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Edistynyt mobiiliohjelmointi, 10.5.2023
- // lokalisointi
- Android Studio vasen ylänurkka -> Vaihda Android-näkymä Project-näkymäksi
- Tehdään app -> src -> main -> res-kansioon kaksi uutta kansiota:
- values-en
- values-fi
- 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".
- Jos editori sekoilee, Clean project -> Rebuild project.
- Tehdään uusi käännös nimeltä "greeting_text", arvoiksi:
- Default: Welcome!
- English: Welcome!
- Finnish: Tervetuloa!
- Kokeillaan käyttää tätä arvoa esim. fragment homessa:
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_margin="20dp"
- android:text="@string/greeting_text"
- android:textSize="32sp"
- android:textStyle="bold"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
- Nyt jos emulaattorissa vaihtaa asetuksista kielen suomeksi, vaihtuu myös tervetuloteksti ulkoasussa.
- // tehdään myös uusi kansio res-kansioon -> layout-sw720dp , ja kopioidaan sinne fragment_home.xml.
- // idea on se että tehdään tästä fragmentista oma versio isoille tableteille (yli 10" näyttö)
- // tehdään tabletin ulkoasuun isompi teksti, kursivoituna ja eri värisenä:
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_margin="20dp"
- android:text="@string/greeting_text"
- android:textColor="#2BAABA"
- android:textSize="140sp"
- android:textStyle="bold|italic"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
- #######################################
- AA CHART KOTLIN -testailua
- #######################################
- https://github.com/AAChartModel/AAChartCore-Kotlin
- jitpack pitää löyty settings.gradlesta (ks. viewien kustomointi -luentojen muistiinpanot)
- Ohjeen mukaan import:
- implementation 'com.github.AAChartModel:AAChartCore-Kotlin:-SNAPSHOT'
- Ei näemmä toimi enää, kokeillaan:
- implementation 'com.github.AAChartModel:AAChartCore-Kotlin:7.2.0'
- Tehdään testaamista varten oma fragment, ChartFragment, lisätään päävalikkoon ja otetaan binding layer käyttöön:
- class ChartFragment : Fragment() {
- private var _binding: FragmentChartBinding? = null
- // This property is only valid between onCreateView and
- // onDestroyView.
- private val binding get() = _binding!!
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- _binding = FragmentChartBinding.inflate(inflater, container, false)
- val root: View = binding.root
- return root
- }
- override fun onDestroyView() {
- super.onDestroyView()
- _binding = null
- }
- }
- // lisätään chart view ulkoasuun:
- <?xml version="1.0" encoding="utf-8"?>
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".ChartFragment">
- <com.github.aachartmodel.aainfographics.aachartcreator.AAChartView
- android:id="@+id/aa_chart_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- </com.github.aachartmodel.aainfographics.aachartcreator.AAChartView>
- </FrameLayout>
- // tämän jälkeen, kokeillaan GitHubissa olevaa esimerkkiä:
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- _binding = FragmentChartBinding.inflate(inflater, container, false)
- val root: View = binding.root
- val aaChartModel : AAChartModel = AAChartModel()
- .chartType(AAChartType.Area)
- .title("title")
- .subtitle("subtitle")
- .dataLabelsEnabled(true)
- .series(arrayOf(
- AASeriesElement()
- .name("Tokyo")
- .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)),
- AASeriesElement()
- .name("NewYork")
- .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)),
- AASeriesElement()
- .name("London")
- .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)),
- AASeriesElement()
- .name("Berlin")
- .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))
- )
- )
- //The chart view object calls the instance object of AAChartModel and draws the final graphic
- binding.aaChartView.aa_drawChartWithChartModel(aaChartModel)
- return root
- }
- // kokeillaan erillisellä datalistalla, jota voi myöhemmin päivittää MQTT:llä
- // tehdään lista, johon kerrytettään lämpötilat talteen
- val temperatureList = mutableListOf<Double>()
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- _binding = FragmentChartBinding.inflate(inflater, container, false)
- val root: View = binding.root
- // laitetaan muutama testiarvo että nähdään toimiiko AAChart oletetusti tällä listalla
- temperatureList.add(12.5)
- temperatureList.add(9.7)
- temperatureList.add(15.1)
- // temperatureListin saa AAChartille sopivaan formaattiin kun käyttää toTypedArray()-funktiota
- // toimii vain jos temperatureList on tyyppiä mutable list -> Double
- val aaChartModel : AAChartModel = AAChartModel()
- .chartType(AAChartType.Line)
- .title("Sääasema")
- .subtitle("Rantavitikan mittauspiste")
- .dataLabelsEnabled(true)
- .series(arrayOf(
- AASeriesElement()
- .name("Lämpötila")
- .data(temperatureList.toTypedArray())
- )
- )
- //The chart view object calls the instance object of AAChartModel and draws the final graphic
- binding.aaChartView.aa_drawChartWithChartModel(aaChartModel)
- return root
- }
- // jos haluat asettaa y-akselille ylä- ja ala-arvon:
- // temperatureListin saa AAChartille sopivaan formaattiin kun käyttää toTypedArray()-funktiota
- // toimii vain jos temperatureList on tyyppiä mutable list -> Double
- val aaChartModel : AAChartModel = AAChartModel()
- .chartType(AAChartType.Line)
- .title("Sääasema")
- .subtitle("Rantavitikan mittauspiste")
- .dataLabelsEnabled(true)
- .yAxisMin(-50)
- .yAxisMax(50)
- .series(arrayOf(
- AASeriesElement()
- .name("Lämpötila")
- .data(temperatureList.toTypedArray())
- )
- )
- // zoomauksen saa lisättyä chart modeliin esim näin:
- .zoomType(AAChartZoomType.Y)
- // jos kytketään AAChart MQTT-dataan, voidaan tehdä näin:
- try {
- // muutetaan vastaanotettu data JSONista -> WeatherStation -luokan olioksi
- var item : WeatherStation = gson.fromJson(result, WeatherStation::class.java)
- Log.d("ADVTECH", item.d.get1().v.toString() + "C")
- // asetetaan tekstimuuttuja käyttöliittymään, jossa on säätietoja
- val temperature = item.d.get1().v
- var humidity = item.d.get3().v
- // pidetään huoli että listan max-koko on 10 lämpötilaa
- while(temperatureList.size >= 10) {
- temperatureList.removeAt(0)
- }
- // lisätään uusi lämpötila listaan
- temperatureList.add(temperature)
- // tehdään chartin data uusiksi listan pohjalta
- var newArray = arrayOf(
- AASeriesElement()
- .name("Lämpötila")
- .data(temperatureList.toTypedArray())
- )
- // koska MQTT-plugin ajaa koodia ja käsittelee dataa
- // tausta-ajolla omassa säikeessään eli threadissa
- // joudumme laittamaan ulkoasuun liittyvän koodin runOnUiThread-blokin
- // sisälle. Muutoin tulee virhe että koodit toimivat eri säikeissä.
- activity?.runOnUiThread {
- // dokumentaatio on nähtävästi tämän osalta vanhentunut
- // aaChartView.aa_onlyRefreshTheChartDataWithChartModelSeries(chartModelSeriesArray)
- binding.aaChartView.aa_onlyRefreshTheChartDataWithChartOptionsSeriesArray(newArray, false)
- }
- }
- catch(e : Exception) {
- Log.d("ADVTECH", e.message.toString())
- Log.d("ADVTECH", "Saattaa olla diagnostiikkadataa.")
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement