Added textViews with pass info to the radarFragment. Minor refactoring.

This commit is contained in:
Arty Bishop committed 2019-11-28 22:58:26 +00:00
1 parent e88b78d4c6
commit d7a094a1e2
5 files changed
+97 -44

No files matched your search

@@ -7,11 +7,13 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.RecyclerView
import com.github.amsacode.predict4java.SatPos
import com.rtbishop.lookingsat.R
import com.rtbishop.lookingsat.repo.SatPass
import java.text.SimpleDateFormat
import java.util.*
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
@@ -20,12 +22,17 @@ import kotlin.math.sin
class RadarFragment : Fragment() {
private val delay = 5000L
private val service = Executors.newSingleThreadScheduledExecutor()
private lateinit var satPass: SatPass
private lateinit var radarView: RadarView
private lateinit var radarSkyFrame: FrameLayout
private lateinit var radarRecycler: RecyclerView
private val service = Executors.newSingleThreadScheduledExecutor()
private val delay = 5000L
private lateinit var radarSatName: TextView
private lateinit var radarMaxEl: TextView
private lateinit var radarAos: TextView
private lateinit var radarLos: TextView
override fun onCreateView(
inflater: LayoutInflater,
@@ -41,9 +48,23 @@ class RadarFragment : Fragment() {
radarSkyFrame = view.findViewById(R.id.radar_sky_frame)
radarRecycler = view.findViewById(R.id.radar_recycler)
radarSatName = view.findViewById(R.id.radar_sat_name)
radarMaxEl = view.findViewById(R.id.radar_maxEl)
radarAos = view.findViewById(R.id.radar_aos)
radarLos = view.findViewById(R.id.radar_los)
radarView = RadarView(activity as MainActivity)
radarSkyFrame.addView(radarView)
val aosTime =
SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(satPass.pass.startTime)
val losTime =
SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(satPass.pass.endTime)
radarSatName.text = satPass.tle.name
radarMaxEl.text = String.format("MaxEl: %.1f°", satPass.pass.maxEl)
radarAos.text = String.format("AOS - %s", aosTime)
radarLos.text = String.format("LOS - %s", losTime)
service.scheduleAtFixedRate({ radarView.invalidate() }, delay, delay, TimeUnit.MILLISECONDS)
}
@@ -66,7 +87,7 @@ class RadarFragment : Fragment() {
setBitmap(bmp)
setMatrix(mtrx)
}
private val linePaint = Paint().apply {
private val radarPaint = Paint().apply {
isAntiAlias = true
color = Color.parseColor("#C0C0C0")
style = Paint.Style.STROKE
@@ -90,19 +111,28 @@ class RadarFragment : Fragment() {
}
private val path: Path = Path()
private lateinit var satPos: SatPos
private var satPassX = 0f
private var satPassY = 0f
override fun onDraw(canvas: Canvas) {
var satPos: SatPos
var satPassX: Float
var satPassY: Float
bmp.eraseColor(Color.TRANSPARENT)
drawRadarView()
drawRadarText()
drawPassTrajectory()
drawSatellite()
canvas.drawBitmap(bmp, left.toFloat(), top.toFloat(), null)
}
cvs.drawLine(center - radius, center, center + radius, center, linePaint)
cvs.drawLine(center, center - radius, center, center + radius, linePaint)
cvs.drawCircle(center, center, radius, linePaint)
cvs.drawCircle(center, center, (radius / 3) * 2, linePaint)
cvs.drawCircle(center, center, radius / 3, linePaint)
private fun drawRadarView() {
cvs.drawLine(center - radius, center, center + radius, center, radarPaint)
cvs.drawLine(center, center - radius, center, center + radius, radarPaint)
cvs.drawCircle(center, center, radius, radarPaint)
cvs.drawCircle(center, center, (radius / 3) * 2, radarPaint)
cvs.drawCircle(center, center, radius / 3, radarPaint)
}
private fun drawRadarText() {
cvs.drawText("N", center - txtSize / 3, center - radius - scale * 2, txtPaint)
cvs.drawText("E", center + radius + scale * 2, center + txtSize / 3, txtPaint)
cvs.drawText("S", center - txtSize / 3, center + radius + txtSize, txtPaint)
@@ -110,7 +140,9 @@ class RadarFragment : Fragment() {
cvs.drawText("0°", center + scale, center - scale * 2, txtPaint)
cvs.drawText("30°", center + scale, center - (radius / 3) - scale * 2, txtPaint)
cvs.drawText("60°", center + scale, center - ((radius / 3) * 2) - scale * 2, txtPaint)
}
private fun drawPassTrajectory() {
while (startTime.before(endTime)) {
satPos = satPass.predictor.getSatPos(startTime)
satPassX = center + sph2CartX(satPos.azimuth, satPos.elevation, radius.toDouble())
@@ -123,8 +155,10 @@ class RadarFragment : Fragment() {
startTime.time += delay
}
cvs.drawPath(path, passPaint)
}
satPos = satPass.predictor.getSatPos(getCurrentDate())
private fun drawSatellite() {
satPos = satPass.predictor.getSatPos(Date())
if (satPos.elevation > 0) {
cvs.drawCircle(
center + sph2CartX(satPos.azimuth, satPos.elevation, radius.toDouble()),
@@ -132,7 +166,6 @@ class RadarFragment : Fragment() {
txtSize / 3, satPaint
)
}
canvas.drawBitmap(bmp, left.toFloat(), top.toFloat(), null)
}
private fun sph2CartX(azimuth: Double, elevation: Double, r: Double): Float {
@@ -144,9 +177,5 @@ class RadarFragment : Fragment() {
val radius = r * (piDiv2 - elevation) / piDiv2
return (radius * sin(piDiv2 - azimuth)).toFloat()
}
private fun getCurrentDate(): Date {
return Date()
}
}
}
@@ -36,14 +36,16 @@ class SatPassAdapter(private val satPassList: List<SatPass>) :
val passStart = holder.itemView.findViewById<TextView>(R.id.card_pass_start)
val passEnd = holder.itemView.findViewById<TextView>(R.id.card_pass_end)
satName.text = String.format("%s", satPass.tle.name)
val aosTime =
SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(satPass.pass.startTime)
val losTime =
SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(satPass.pass.endTime)
satName.text = satPass.tle.name
maxEl.text = String.format("%.1f°", satPass.pass.maxEl)
passVector.text =
String.format("V: %2d° -> %2d°", satPass.pass.aosAzimuth, satPass.pass.losAzimuth)
passStart.text =
SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(satPass.pass.startTime)
passEnd.text =
SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(satPass.pass.endTime)
String.format("Az: %2d° -> %2d°", satPass.pass.aosAzimuth, satPass.pass.losAzimuth)
passStart.text = String.format("AOS - %s", aosTime)
passEnd.text = String.format("LOS - %s", losTime)
layout.setOnClickListener {
val bundle = bundleOf("satPass" to satPass)
@@ -25,4 +25,43 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/radar_sky_frame" />
<TextView
android:id="@+id/radar_sat_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/card_sat_name"
app:layout_constraintEnd_toEndOf="@+id/radar_aos"
app:layout_constraintStart_toStartOf="@+id/radar_aos"
app:layout_constraintTop_toTopOf="@+id/radar_maxEl" />
<TextView
android:id="@+id/radar_maxEl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginEnd="4dp"
android:text="@string/card_max_el"
app:layout_constraintEnd_toEndOf="@+id/radar_sky_frame"
app:layout_constraintTop_toTopOf="@+id/radar_sky_frame" />
<TextView
android:id="@+id/radar_aos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginBottom="4dp"
android:text="@string/card_pass_aos_time"
app:layout_constraintBottom_toBottomOf="@+id/radar_sky_frame"
app:layout_constraintStart_toStartOf="@+id/radar_sky_frame" />
<TextView
android:id="@+id/radar_los"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:layout_marginBottom="4dp"
android:text="@string/card_pass_los_time"
app:layout_constraintBottom_toBottomOf="@+id/radar_sky_frame"
app:layout_constraintEnd_toEndOf="@+id/radar_sky_frame" />
</androidx.constraintlayout.widget.ConstraintLayout>
-15
View File
@@ -71,20 +71,5 @@
app:layout_constraintStart_toStartOf="@+id/card_pass_start"
app:layout_constraintTop_toBottomOf="@+id/card_max_el" />
<TextView
android:id="@+id/card_pass_aos"
style="@style/CardSatPass.SideText"
android:layout_marginEnd="4dp"
android:text="@string/card_pass_aos"
app:layout_constraintBaseline_toBaselineOf="@+id/card_pass_start"
app:layout_constraintEnd_toStartOf="@+id/card_pass_start" />
<TextView
android:id="@+id/card_pass_los"
style="@style/CardSatPass.SideText"
android:text="@string/card_pass_los"
app:layout_constraintBaseline_toBaselineOf="@+id/card_pass_end"
app:layout_constraintEnd_toEndOf="@+id/card_pass_aos" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
+3 -5
View File
@@ -22,12 +22,10 @@
<string name="menu_about">About the App</string>
<string name="card_sat_name">Meteor M2–2</string>
<string name="card_pass_vector">V: 180° -> 360°</string>
<string name="card_pass_vector">Az: 180° -> 360°</string>
<string name="card_max_el">75.5°</string>
<string name="card_pass_aos">AOS -</string>
<string name="card_pass_los">LOS -</string>
<string name="card_pass_aos_time">13:14:15</string>
<string name="card_pass_los_time">16:17:18</string>
<string name="card_pass_aos_time">AOS - 13:14:15</string>
<string name="card_pass_los_time">LOS - 16:17:18</string>
<string name="btn_ok">OK</string>
<string name="btn_cancel">Cancel</string>