Skip to content

๐Ÿƒ๐Ÿปโ€โ™‚๏ธ๐Ÿƒ๐Ÿปโ€โ™€๏ธ ๋Ÿฌ๋„ˆ์Šคํ•˜์ด Android Repository ๐Ÿƒ๐Ÿปโ€โ™‚๏ธ๐Ÿƒ๐Ÿปโ€โ™€๏ธ

Notifications You must be signed in to change notification settings

RunnersHi/RunnersHi_Android

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

drawing

๋Ÿฌ๋‹์„ ๊ฒŒ์ž„์ฒ˜๋Ÿผ, ๋Ÿฌ๋„ˆ์Šคํ•˜์ด

์šฐ๋ฆฌ๋Š” 'ํ•จ๊ป˜' ๋›ธ ๋•Œ ๋” ๋งŽ์€ ์‹œ๋„ˆ์ง€๋ฅผ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค. ์š”์ฆ˜ ์„ธ๋Œ€๋“ค์€ ๋Ÿฌ๋‹ ํฌ๋ฃจ์— ์†Œ์†๋˜์–ด ๋Ÿฌ๋‹์„ ์ฆ๊ธฐ๊ณค ํ•˜์ง€๋งŒ, Offline ๋Ÿฌ๋‹ํฌ๋ฃจ๋Š” ๊ณ ์ •๋œ ์‹œ๊ฐ„๊ณผ ์žฅ์†Œ๋ผ๋Š” ํ•œ๊ณ„์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐ™์ด ๋‹ฌ๋ฆฌ๊ณ  ์‹ถ์ง€๋งŒ, ๋‹ฌ๋ฆด ์ˆ˜ ์—†๋Š” ์ˆœ๊ฐ„๋“ค์ด ์กด์žฌํ•œ๋‹ค๋Š” ์ ์— ์ง‘์ค‘ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ์‹œ๊ณต๊ฐ„์˜ ์ œ์•ฝ์—†์ด ๋‹ค์–‘ํ•œ ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ๋‹ฌ๋ฆผ์œผ๋กœ์จ ๊ฑด๊ฐ•ํ•œ ๋ผ์ดํ”„ ์Šคํƒ€์ผ์„ ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

โœจ  ๊ธฐ์กด ๋Ÿฌ๋‹ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ์˜ ํ™•์‹คํ•œ ์ฐจ๋ณ„ํ™” ์š”์†Œ๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.    

    ์‚ฌ์šฉ์ž๋Š” '์‹ค์‹œ๊ฐ„ ๊ฒฝ์Ÿ'์ด๋ผ๋Š” ๊ฒŒ์ด๋ฏธํ”ผ์ผ€์ด์…˜ ์š”์†Œ๋ฅผ ํ†ตํ•ด ์ง€๋ฃจํ•œ ๋Ÿฌ๋‹์ด ์•„๋‹Œ, ๊ฒŒ์ž„์ฒ˜๋Ÿผ ์œ ์พŒํ•œ ๋Ÿฌ๋‹์„ ์ฆ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โœจ  '๋”ฐ๋กœ, ๋˜ ๊ฐ™์ด' ํ•จ๊ป˜ ํ•˜๋Š” ๊ฐ€์น˜๋ฅผ  ์ถ”๊ตฌํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.  

    ์–ด๋–ค ๋‹จ์ฒด์— ์†Œ์†๋˜์ง€ ์•Š์•„๋„, ๊ตณ์ด ์นœ๊ตฌ์™€ ์•ฝ์†์„ ์žก๊ณ  ๋งŒ๋‚˜์ง€ ์•Š์•„๋„, ์‚ฌ์šฉ์ž๋Š” ์–ธ์ œ ์–ด๋””์„œ๋“  ๋‚˜์™€ ํ•จ๊ป˜ ๋›ธ ์ƒ๋Œ€๋ฅผ ์ฐพ์•„ ๊ฐ™์ด ๋Ÿฌ๋‹์„ ์ฆ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โœจ  ํŠธ๋ Œ๋””ํ•œ ๋””์ž์ธ์  ์š”์†Œ๋ฅผ ํ†ตํ•ด ์‹œ๊ฐ์ ์ธ ์ฆ๊ฑฐ์›€์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.  

    ํŠน์ • ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋ฉด ๊ฐœ์„ฑ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฑƒ์ง€๋ฅผ ํš๋“ํ•  ์ˆ˜ ์žˆ์Œ๊ณผ ๋™์‹œ์— ๋‹ค์–‘ํ•œ ๋Ÿฌ๋„ˆ ๋žญํ‚น์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์ฆ๊ฑฐ์›€์„ ๋„๋ชจํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋˜, ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด UX ์š”์†Œ๋Š” ์ฆ๊ฑฐ์›€์„ ๋ฐฐ๋กœ ํ–ฅ์ƒ์‹œ์ผœ ์ค„๊ฑฐ์—์š”.


๐Ÿท A-1. ConstraintLayout ์‚ฌ์šฉํ•œ ํ™”๋ฉด ๊ฐœ๋ฐœ


๐Ÿ‘‰ activity_login.xml

  • activity_login.xml์˜ ๋ทฐ๋“ค์„ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด guideline์œผ๋กœ g_left,g_right๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค
  • edt_login_id, edt_login_pw, btn_login_confirm์— 0dp๋กœ match_constraint์†์„ฑ์„ ์ ์šฉํ•˜์—ฌ guideline ๋ฒ”์œ„๋‚ด์— ๊ฝ‰์ฐจ๊ฒŒ ๋งž์ท„๋‹ค.
  • ์•„์ด๋””/๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฒ„ํŠผ์ธ tv_login_sign_find๋Š” layout_constraintStart_toEndOf="@id/tv_login_sign_up"์œผ๋กœ ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ๊ณผ ์—ฐ๊ด€์„ฑ์žˆ๋Š” ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฑธ์–ด์ฃผ์—ˆ๋‹ค.
    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/g_left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_begin="54dp" />
    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/g_right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintGuide_end="54dp" />

๐Ÿ‘‰ activity_sign_up.xml

  • activity_sign_up.xml๋‚ด์˜ ๋ทฐ๋“ค์„ ๊ฐ€์šด๋ฐ๋กœ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด margin_vertical ๋Œ€์‹  guideLine์ธ g_left,g_right๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • edt_sign_up_id,edt_sign_up_nick_name,edt_sign_up_pw,edt_sign_up_pw_confirm์— android:layout_width="0dp"์œผ๋กœ guideLine์— ๊ฝ‰์ฐจ๋„๋ก match_constraint์†์„ฑ์„ ๊ฑธ์–ด์ฃผ์—ˆ๋‹ค.
  • ์ค‘๋ณตํ™•์ธ๋ฒ„ํŠผ์ธ btn_sign_up_id_confirm์— layout_constraintTop_toTopOf="@+id/edt_sign_up_id" ์†์„ฑ์„ ์ฃผ์–ด ์•„์ด๋””์ž…๋ ฅ์นธ๊ณผ ์—ฐ๊ด€์„ฑ์žˆ๋Š” ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฑธ์–ด์ฃผ์—ˆ๋‹ค.
  • ์ค‘๋ณตํ™•์ธ๋ฒ„ํŠผ์ธ btn_sign_up_nick_name_confirm์— layout_constraintTop_toTopOf="@+id/edt_sign_up_nick_name" ์†์„ฑ์„ ์ฃผ์–ด ๋‹‰๋„ค์ž„์ž…๋ ฅ์นธ๊ณผ ์—ฐ๊ด€์„ฑ์žˆ๋Š” ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฑธ์–ด์ฃผ์—ˆ๋‹ค.
<?xml version="1.0" encoding="utf-8"?>
        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/g_left"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="30dp"
            android:orientation="vertical"
            app:layout_constraintGuide_begin="30dp"
            app:layout_constraintStart_toStartOf="parent" />
        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/g_right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_end="30dp" />

๐Ÿ‘‰ activity_on_board.xml4

  • ํ™”๋ฉด์˜ ์ค‘์•™์— ์œ„์น˜ํ•œ 4๋‹จ๊ณ„๋กœ ๋ถ„๋ฅ˜๋œ ์˜จ๋ณด๋”ฉ ๋ทฐ๋ฅผ ์ขŒ, ์šฐ๋กœ ๋„˜๊ฒจ๋ณด๊ธฐ ์œ„ํ•ด ViewPager๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ ํ™”๋ฉด๋“ค์„ fragment๋กœ ๊ตฌ์„ฑํ–ˆ๋‹ค.
  • Fragment๊ฐ€ ๋“ค์–ด๊ฐˆ ViewPager๋ฅผ dot indicator๊ฐ€ ์žˆ๋Š” ์ƒ๋‹จ์˜ ConstraintLayout๊ณผ textView Button์ด ์žˆ๋Š” ํ•˜๋‹จ ConstraintLayout์™€ ์—ฐ๋™ํ•œ๋’ค, layout_width๋Š” match_parent๋กœ, layout_height๋Š” 0dp๋กœ ์คŒ์œผ๋กœ์„œ match_contraint๋ฅผ ์ค€๋‹ค.
<androidx.viewpager.widget.ViewPager
        android:id="@+id/vp_on_board"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginTop="26dp"
        app:layout_constraintBottom_toTopOf="@+id/constraint_id"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/indicator_on_board"
        app:layout_constraintVertical_bias="1.0" />

๐Ÿ‘‰ fragment_my_profile.xml4

  • ๋งˆ์ด ํ”„๋กœํ•„์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„์˜ ๊ฒฝ์šฐ ์ œํ”Œ๋ฆฐ์— ์˜ฌ๋ฆฐ ์ด๋ฏธ์ง€์˜ ๊ธฐ๋ณธ๊ฐ’(wrap_content)๊ณผ ์ ์šฉ๊ฐ’์˜ ์ฐจ์ด๊ฐ€ ์žˆ์–ด ์ ์šฉ๊ฐ’์„ ๊ธฐ์ž…ํ•˜์—ฌ ๋ทฐ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
<ImageView
            android:id="@+id/imgv_my_profile_img"
            android:layout_width="132dp"
            android:layout_height="132dp"
            android:layout_marginTop="2dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/imgv_my_profile_setting"
            app:srcCompat="@drawable/icon_redman_shorthair" />

๐Ÿท A-2. Kotlin์„ ์ด์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๐Ÿƒ Kotlin Collection ํ™•์žฅํ•จ์ˆ˜ ์‚ฌ์šฉ

  • ์„œ๋ฒ„์™€ ์œ„๋„, ๊ฒฝ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์ผ“ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ, ๊ธฐ์กด์˜ ArrayList๋ฅผ JSONArray๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
 fun getCoorsJSONArr(coordsArr: ArrayList<LatLng>): JSONArray {
        return JSONArray(coordsArr.map {
            try{
                JSONObject().apply {
                    this.put("latitude", it.latitude)
                    this.put("longitude", it.longitude)
                }
            }catch (e: JSONException){e.printStackTrace()}
        })
 }

๐Ÿƒ Custom ํ™•์žฅํ•จ์ˆ˜

๐Ÿ‘‰ dpToPx.kt

  • xml์ฝ”๋“œ์™€ ๋‹ฌ๋ฆฌ kotlin source code์—์„œ๋Š” px๋‹จ์œ„๋ฅผ ์‚ฌ์šฉ, dp๋ฅผ px๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ™•์žฅํ•จ์ˆ˜
fun Int.dpToPx(resources: Resources): Int = TypedValue
    .applyDimension(
        TypedValue.COMPLEX_UNIT_DIP,
        this.toFloat(), resources.displayMetrics).toInt()

๐Ÿ‘‰ logDebug.kt

  • Log ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํ™•์žฅํ•จ์ˆ˜
fun String.logDebug(any: Any) {
    Log.d(any::class.java.simpleName, this)
}

๐Ÿ‘‰ newStartActivity.kt

  • ์•กํ‹ฐ๋น„ํ‹ฐ ์ „ํ™˜ ํ™•์žฅํ•จ์ˆ˜
fun <T> Context.newStartActivity(toClass: Class<T>){
    val intent = Intent(this, toClass)
    startActivity(intent)
}

๐Ÿท A-3. ํ”„๋กœ์ ํŠธ ์„ค๋ช…

ํ”„๋กœ์ ํŠธ ์‚ฌ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


- lottie ์‚ฌ์šฉ, ์•ฑ ์‹คํ–‰์‹œ ๋‚˜์˜ค๋Š” splash, ์ƒ๋Œ€๋ฐฉ ๋˜๋Š” ์ž์‹ ๊ณผ์˜ ๋Œ€๊ฒฐ์‹œ ๋‚˜์˜ค๋Š” 10์ดˆ ์นด์šดํŠธ ๋ฐ RUN! ํ™”๋ฉด ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•จ.
-> implementation 'com.airbnb.android:lottie:3.4.1'
  • ๋„ค์ด๋ฒ„์ง€๋„ SDK, RUNNER'S HI ์•ฑ์˜ ํ•ต์‹ฌ๊ธฐ๋Šฅ์œผ๋กœ ์ž์‹ ์˜ ํ˜„์žฌ์œ„์น˜ ๋ฐ ์ด๋™๊ฒฝ๋กœ, ๊ฒŒ์ž„ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ง€๋„๋กœ ๋„ค์ด๋ฒ„์‚ฌ์˜ SDK๋ฅผ ์‚ฌ์šฉํ•จ.
    -> implementation 'com.naver.maps:map-sdk:3.8.0'

  • Retrofit ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์„œ๋ฒ„ํ†ต์‹ ์„ ์œ„ํ•จ : https://github.com/square/retrofit
    -> implementation 'com.squareup.retrofit2:retrofit:2.6.2'

  • Retrofit ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‘๋‹ต์œผ๋กœ ๊ฐ€์งœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด
    -> implementation 'com.squareup.retrofit2:retrofit-mock:2.6.2'

  • ๊ฐ์ฒด ์‹œ๋ฆฌ์–ผ๋ผ์ด์ฆˆ๋ฅผ ์œ„ํ•œ Gson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : https://github.com/google/gson
    -> implementation 'com.google.code.gson:gson:2.8.6'

  • Retrofit ์—์„œ Gson ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    -> implementation 'com.squareup.retrofit2:converter-gson:2.6.2'

  • Java Scalars Converter : String์ด๋‚˜ primitive ํƒ€์ž…์„ text/plain boides๋กœ ์ปจ๋ฒ„ํŒ… ํ•˜๋Š”๋ฐ ์“ด๋‹ค.
    -> implementation 'com.squareup.retrofit2:converter-scalars:2.8.0'

  • ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ
    -> implementation 'androidx.recyclerview:recyclerview:1.1.0'

  • material ๋””์ž์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    -> implementation "com.google.android.material:material:1.2.0-alpha06"

  • ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : glide
    -> implementation "com.github.bumptech.glide:glide:4.11.0" annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' kapt "com.github.bumptech.glide:compiler:4.11.0"

  • ๋™๊ทธ๋ž€ ์ด๋ฏธ์ง€ ์ปค์Šคํ…€ ๋ทฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : https://github.com/hdodenhof/CircleImageView
    -> implementation 'de.hdodenhof:circleimageview:3.1.0'

  • CoordinateLayout ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    -> implementation 'com.google.android.material:material:1.2.0-alpha01' -> implementation 'androidx.legacy:legacy-support-v4:1.0.0' -> implementation 'androidx.recyclerview:recyclerview:1.1.0' -> testImplementation 'junit:junit:4.12'


๐Ÿƒํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

drawing

  • ํŒจํ‚ค์ง€ ์„ค๋ช…
package ์„ค๋ช…
data ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ์“ฐ๋Š” ๋ฐ์ดํ„ฐ๊ด€๋ จ ํด๋ž˜์Šค
extension ํ™•์žฅํ•จ์ˆ˜๊ด€๋ จ ํŒŒ์ผ
feature ๊ธฐ๋Šฅ๋ณ„ ํด๋”๋“ค
network Retrofit์„ ์‚ฌ์šฉํ•œ http ํ†ต์‹ ์‹œ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ํด๋ž˜์Šค
socket Socket.io๋ฅผ ์‚ฌ์šฉํ•œ ์†Œ์ผ“ ํ†ต์‹ ์‹œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๋ฐ ์„œ๋น„์Šค
util SharePrererence ๋ฐ ๊ธฐํƒ€ ์‚ฌ์šฉ ํด๋ž˜์Šค
  • feature๋‚ด ํ•˜์œ„ ํŒจํ‚ค์ง€ ์„ค๋ช…
feature๋‚ด ํ•˜์œ„ ํŒจํ‚ค์ง€ ํ•ด๋‹น ์•กํ‹ฐ๋น„ํ‹ฐ ๋ฐ ํ”„๋ ˆ๊ทธ๋จผํŠธ ์„ค๋ช…
badgedetail BadgeDetailActivity ๋ฑƒ์ง€ ์ƒ์„ธ๋ณด๊ธฐ ํ™”๋ฉด
finishrun FinishRunActivity ๋Ÿฌ๋‹์™„๋ฃŒ ํ›„ ํ™”๋ฉด
home HomeActivity, HomeFragment, BottomSheetFragment ํ™ˆ ํ™”๋ฉด
login LoginActivity ๋กœ๊ทธ์ธ ํ™”๋ฉด
matchfail MatchFailActivity ๋งค์นญ ์‹คํŒจ ํ™”๋ฉด
myprofile MyProfileFragment ๋งˆ์ดํ”„๋กœํ•„ ํ™”๋ฉด
onboard OnBoardActivity ์˜จ๋ณด๋”ฉ ํ™”๋ฉด
rank RankFragment ๋žญํ‚น ํ™”๋ฉด
recdetail RecDetailActivity ๊ธฐ๋ก์ƒ์„ธ๋ณด๊ธฐ ํ™”๋ฉด
record_badge BadgeFragment, RecBadgeFragment, RecFragment ๋ฑƒ์ง€ ๋ชจ์•„๋ณด๊ธฐ ํ™”๋ฉด, ๊ธฐ๋ก ๋ชจ์•„๋ณด๊ธฐ ํ™”๋ฉด
result ResultActivity ๋Ÿฌ๋‹ ๊ฒฐ๊ณผ ํ™”๋ฉด
run GoalActivity, RivalActivity, MatchProcActivity, MatchSucActivity, RunActivity ๋งค์นญ์ƒ๋Œ€์„ ํƒ ํ™”๋ฉด, ๋งค์นญ ํ™”๋ฉด, ๋‹ฌ๋ฆฌ๊ธฐ ํ™”๋ฉด
runalone WaitMeActivity, GoalRunMeActivity, FinishRunActivity ๋‚˜์™€ ๋‹ฌ๋ฆฌ๊ธฐ ํ™”๋ฉด, ๋”๋ฏธ์™€ ๋‹ฌ๋ฆฌ๊ธฐ ํ™”๋ฉด, ๋‚˜์™€ ๋‹ฌ๋ฆฌ๊ธฐ ๊ฒฐ๊ณผ ํ™”๋ฉด
runcountdown CountDownActivity, StartRunActivity ๋‹ฌ๋ฆฌ๊ธฐ์ „ ์นด์šดํŠธ ๋‹ค์šด ํ™”๋ฉด, ๋‹ฌ๋ฆฌ๊ธฐ ์‹œ์ž‘ ์•Œ๋ฆผ ํ™”๋ฉด
rundummy MatchDummyActivity ๋”๋ฏธ๋ฐ์ดํ„ฐ์™€ ๋‹ฌ๋ฆฌ๊ธฐ ๋งค์นญ ํ™”๋ฉด
signup SignUpActivity ํšŒ์›๊ฐ€์ž… ํ™”๋ฉด
splash SplashActivity ์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด

๐Ÿƒ ํ•ต์‹ฌ๊ธฐ๋Šฅ ๋ฐ ๊ตฌํ˜„ํ™”๋ฉด ์ •๋ฆฌ

๐Ÿ”ฅ ์Šคํ”Œ๋ž˜์‰ฌ, ์˜จ๋ณด๋”ฉ, ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ํ™”๋ฉด








  • ์Šคํ”Œ๋ž˜์‰ฌ ํ™”๋ฉด์—์„œ SharedPreferences์œผ๋กœ ์ž๋™๋กœ๊ทธ์ธ ๊ตฌํ˜„
  • ํšŒ์›๊ฐ€์ž… ํ™”๋ฉด์—์„œ textWatcher์œผ๋กœ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ •๊ทœํ‘œํ˜„์‹ ๊ฒ€์‚ฌ, ๋ชจ๋“  ์กฐ๊ฑด ๋งŒ์กฑ์‹œ์—๋งŒ ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ ํ™œ์„ฑํ™”




๐Ÿ‘‰ ๐Ÿ”ฅ ํ™ˆํ™”๋ฉด, ๋งค์นญํ™”๋ฉด, ๋Ÿฌ๋‹ํ™”๋ฉด- ๋‹ค๋ฅธ์‚ฌ๋žŒ๊ณผ ๊ฒฝ์Ÿ, ๋‚˜์™€ ๊ฒฝ์Ÿํ•˜๊ธฐ ๐Ÿ‘ˆ ํ•ต์‹ฌ๊ธฐ๋Šฅ

drawing


  • ํ™ˆํ™”๋ฉด์—์„œ BottomSheetNavigation ์‚ฌ์šฉ
  • ๋งค์นญํ™”๋ฉด์—์„œ Socket.io๋ฅผ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์œผ๋กœ ์‚ฌ์šฉ์ž์™€ ๋งค์นญํ•จ
  • ๋Ÿฌ๋‹ํ™”๋ฉด์—์„œ Socket.io๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„๋กœ ๋Ÿฌ๋‹ ๊ธฐ๋ก ์ „์†ก, ๋งค์นญ ์ƒ๋Œ€๋ฐฉ์˜ ๋Ÿฌ๋‹ ๊ธฐ๋ก ๋ฐ›์Œ
  • ๋Ÿฌ๋‹ํ™”๋ฉด์—์„œ NaverMap API๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์ด๋™๊ฑฐ๋ฆฌ ๊ธฐ๋ก
  • ๋Ÿฌ๋‹ํ™”๋ฉด์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ด๋™์‹œ๊ฐ„, ๋Ÿฌ๋‹๊ฑฐ๋ฆฌ, ํŽ˜์ด์Šค ๋ณด์—ฌ์คŒ
  • ๋‚˜์™€ ๊ฒฝ์Ÿํ•˜๊ธฐ ํ™”๋ฉด์—์„œ TextToSpeeach์™€ Timer๋กœ ์Œ์„ฑํ”ผ๋“œ๋ฐฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„

๐Ÿ”ฅ ๊ธฐ๋กํ™”๋ฉด, ๊ธฐ๋ก ์ž์„ธํžˆ๋ณด๊ธฐ ํ™”๋ฉด

drawing drawing drawing
  • ๊ธฐ๋กํ™”๋ฉด์—์„œ ๋งค์นญ์ƒ๋Œ€๋ฐฉ๊ณผ ๋Ÿฌ๋‹ ๊ธฐ๋ก ๋น„๊ต ๊ฐ€๋Šฅ ๋ฐ ์ŠนํŒจ ์—ฌ๋ถ€ ๋ณด์—ฌ์คŒ
  • ๊ธฐ๋ก์ž์„ธํžˆ ๋ณด๊ธฐํ™”๋ฉด์—์„œ NaverMap์‚ฌ์šฉ์œผ๋กœ ๋Ÿฌ๋‹ ๊ฒฝ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ


๐Ÿ”ฅ ๋‚˜์˜ ๋Ÿฌ๋‹ ๊ธฐ๋ก ํ™”๋ฉด, ๋ฑƒ์ง€ํ™”๋ฉด



  • ํƒญ ๋ ˆ์ด์•„์›ƒ fragment์˜ ์ขŒ, ์šฐ์ธก์— ์œ„์น˜ํ•œ ๋Ÿฌ๋‹๊ธฐ๋ก, ๋Ÿฌ๋‹๋ฐฐ์ง€ ๋ทฐ์ด๋‹ค.
  • ๋‚˜์˜ ๋ชจ๋“  ๊ธฐ๋ก๊ณผ ์ŠนํŒจ, ๊ธฐ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํด๋ฆญ์‹œ ๊ธฐ๋ก ์ƒ์„ธ๋ณด๊ธฐ ๋ทฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋Ÿฌ๋‹๋ฐฐ์ง€๋Š” ์ž์‹ ์ด ๋ณด์œ ํ•œ ๋ชจ๋“  ๋ฐฐ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐฐ์ง€ ํด๋ฆญ์‹œ ๋ฐฐ์ง€ ์ƒ์„ธ๋ณด๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ”ฅ ๋žญํ‚น, ๋งˆ์ด ํ”„๋กœํ•„ ๋ทฐ



  • ๋žญํ‚น๋ทฐ์—์„œ ์ด๋‹ฌ์˜ ๋Ÿฌ๋„ˆ, ๋ช…์˜ˆ์˜ ์ „๋‹น, ์กŒ์ž˜์‹ธ์— ๋Œ€ํ•œ ์ƒ๋Œ€๋ฐฉ์˜ ๋žญํ‚น์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋งˆ์ด ํ”„๋กœํ•„์—์„œ ๋‚˜์˜ ๋ ˆ๋ฒจ, ์ „์ , ๋ฐฐ์ง€๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜์—ฌ ๋กœ๊ทธ์•„์›ƒ ๋ฒ„ํŠผ์„ ํ†ตํ•ด ๋กœ๊ทธ ์•„์›ƒ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

About

๐Ÿƒ๐Ÿปโ€โ™‚๏ธ๐Ÿƒ๐Ÿปโ€โ™€๏ธ ๋Ÿฌ๋„ˆ์Šคํ•˜์ด Android Repository ๐Ÿƒ๐Ÿปโ€โ™‚๏ธ๐Ÿƒ๐Ÿปโ€โ™€๏ธ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages