アプリ開発#1「vehcle G simulator」

アプリ開発

android app.です。
こちらはkotlinで開発しました。

アプリ紹介

該当アプリはこちらになります。
Google Play で手に入れよう
紹介動画です。

苦労した点

車両の物理モデルは別途記事にしたいと思う。

recyclerviewにてalert dialogを加え、リストの編集を可能に

本当はリサイクラービュー内のクラスでなく、リサイクラービューを使うクラスにalert diagramを使いたかったが、この本のやり方だとうまくできなかったので、Bindviewholder内にalert diagramを入れた。

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    //TODO("Not yet implemented")
    val vehiclespec_recycle = rResults[position]
    holder.dateText?.text = DateFormat.format("yyyy/MM/dd kk:mm", vehiclespec_recycle?.dateTime)
    holder.vehiclenameText?.text = vehiclespec_recycle?.vehclename_realm
    holder.itemView.setBackgroundColor(if (position % 2 == 0) Color.LTGRAY else Color.WHITE)
    holder.itemView.setOnClickListener{
        // ダイアログを作成して表示
        AlertDialog.Builder(it.context).apply {
            //setTitle("Title")
            val temp= " date: " + (holder.dateText?.text) as String + ".\n name:" + holder.vehiclenameText?.text
            setMessage(temp)
            setPositiveButton("to_spec", DialogInterface.OnClickListener { _, _ ->
                // OKをタップしたときの処理
                val intent = Intent(it.context,input_vehicle_spec::class.java)
                intent.putExtra("id",vehiclespec_recycle?.id)
                it.context.startActivity(intent)
            })
            setNegativeButton("delete", DialogInterface.OnClickListener { _, _ ->
                // NGをタップしたときの処理
                realm = Realm.getDefaultInstance()
                realm.executeTransaction {
                    val bloodPress = realm.where<Vehiclespec>(Vehiclespec::class.java)
                        .equalTo("id",vehiclespec_recycle?.id )
                        ?.findFirst()
                        ?.deleteFromRealm()
                }
                realm.close()
                //リスト更新
                notifyDataSetChanged()
                Toast.makeText(it.context, "delete completed", Toast.LENGTH_SHORT).show()
            })
            show()
        }
    }
}

mpandroidchartで拡大、縮小、カーソルで値を出す

これは方々色々調べてどうにか実装。拡大、縮小については、特にハードルは高くない。カーソルで値を出すがちょい難しい。
拡大縮小の実装
setPinchZoom(true)
カーソルで値を出す

        override fun refreshContent(
            e: Entry,
            highlight: Highlight?
        ) {
              tvContent.text=e.x.toString()
              super.refreshContent(e, highlight);
        }

実装

chart_StaticLineGraph2.setDrawMarkerViews(true)
val customMarkerView =
    CustomMarkerView(this, R.layout.high_light_value)
chart_StaticLineGraph2.setMarkerView(customMarkerView)

「high_light_value」は別途xmlで作成

realmでデータ管理

realmでデータ管理するときは、リサイクラービューを使った。理由は、realmはデータリストをidで管理しており、通常のリストビューだとidをリストに表示しないと管理できないため。。

まとめ

ここでは、recycler viewとMPandroidchartで躓いた部分を紹介。詳しい説明は他の人のを参考にするとよい。ここに記載したのは他HPを探しても見つけられず、自分で頑張って出来たものです。参考にしてみてください。