Added textViews with pass info to the radarFragment. Minor refactoring.
This commit is contained in:
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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
Reference in new issue
Block a user