FamilyRootView is a Compose view component that takes a list of relatives containing references to their parents and automatically draws a family relationship diagram. This is the first version of the component.
- Automatic Diagram Generation: Automatically creates a visual representation of family relationships.
- Interactive: Allows for interactive elements such as clickable persons.
Add the following to your build.gradle
file:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.maestrovsmaster:FamilyRootView:1.0.0'
}
Define your Person data class:
data class Person(
override var id: String = "",
override var name: String = "",
override var mother: Person? = null,
override var father: Person? = null,
override var children: List<Person>? = null,
override var siblings: List<Person>? = null,
) : AbstractPerson<Person>(id, name, mother, father) {
override fun description() = name
}
Create your sample data:
val mockPerson = Person(
"0",
"Maria",
father = Person(id = "1"),
mother = Person(id = "2"),
)
val mockFather = Person(
"1",
"Father",
)
val mockMother = Person(
"2",
"Mother",
father = Person(id = "3"),
mother = Person(id = "4"),
)
val mockGrannyMom1 = Person(
"3",
"Granny Mom",
)
val mockGrannyDad1 = Person(
"4",
"Granny Dad",
)
...
val listOfPersons = listOf(
mockPerson,
mockFather, mockMother,
mockGrannyDad1, mockGrannyMom1
)
val peopleMap = listOfPersons.associateBy { it.id ?: "null" }
val personId = "0"
Build the family tree and render the diagram:
val rootPerson = peopleMap[personId]
rootPerson?.let {
val binaryTree = buildBinaryTree(it, peopleMap)
FamilyRootCanvas(sizeDp, binaryTree) { person ->
Log.d("FamilyRootView", "ClickedPerson = $person")
}
}
This project is licensed under the MIT License - see the LICENSE file for details.