diff --git a/app/src/main/java/com/uzlov/moviefind/HostActivity.kt b/app/src/main/java/com/uzlov/moviefind/HostActivity.kt index eaec0b8..065c5eb 100644 --- a/app/src/main/java/com/uzlov/moviefind/HostActivity.kt +++ b/app/src/main/java/com/uzlov/moviefind/HostActivity.kt @@ -7,6 +7,7 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import com.uzlov.moviefind.databinding.ActivityMainBinding +import com.uzlov.moviefind.fragments.FilmFragment import com.uzlov.moviefind.fragments.HomeFragment import com.uzlov.moviefind.fragments.PopularFilmsFragment @@ -15,7 +16,7 @@ class HostActivity : AppCompatActivity() { private val popularFilmsFragment = PopularFilmsFragment() private val homeFragment = HomeFragment() private var activeFragment = Fragment() - + private var filmsFragmentL = FilmFragment() private var _viewBinding: ActivityMainBinding ?= null private val viewBinding get() = _viewBinding!! @@ -39,7 +40,7 @@ class HostActivity : AppCompatActivity() { } R.id.menu_settings -> { Toast.makeText(this, getString(R.string.in_developing), Toast.LENGTH_SHORT).show() - true + false } else -> false } @@ -50,12 +51,14 @@ class HostActivity : AppCompatActivity() { supportFragmentManager.beginTransaction().apply { add(R.id.fragment_container, homeFragment, "homeFragment").hide(homeFragment) add(R.id.fragment_container, popularFilmsFragment, "popularFilmsFragment").hide(popularFilmsFragment) + add(R.id.fragment_container, filmsFragmentL, "filmsFragmentL").hide(filmsFragmentL) }.commit() setActiveFragment(homeFragment) } - private fun setActiveFragment(fragment: Fragment){ + private fun setActiveFragment(fragment: Fragment) { + if(supportFragmentManager.backStackEntryCount > 0) supportFragmentManager.popBackStack() supportFragmentManager.beginTransaction().hide(activeFragment).show(fragment).commit() activeFragment = fragment } diff --git a/app/src/main/java/com/uzlov/moviefind/fragments/FilmFragment.kt b/app/src/main/java/com/uzlov/moviefind/fragments/FilmFragment.kt new file mode 100644 index 0000000..3e8cfd8 --- /dev/null +++ b/app/src/main/java/com/uzlov/moviefind/fragments/FilmFragment.kt @@ -0,0 +1,74 @@ +package com.uzlov.moviefind.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.uzlov.moviefind.databinding.FragmentFilmBinding +import com.uzlov.moviefind.model.TestFilm +import com.uzlov.moviefind.ui.ActorFilmsAdapter +import com.uzlov.moviefind.ui.MyItemDecorator + +class FilmFragment : Fragment() { + + private var _viewBinding: FragmentFilmBinding?=null + private val viewBinding get() = _viewBinding!! + private lateinit var film : TestFilm + + companion object { + fun newInstance(testFilm: TestFilm): FilmFragment { + val data = Bundle().apply { + putParcelable("film_key", testFilm) + } + return FilmFragment().apply { arguments = data } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + film = arguments?.getParcelable("film_key") ?: TestFilm() + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _viewBinding = FragmentFilmBinding.inflate(layoutInflater, container, false) + return viewBinding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val actorAdapter = ActorFilmsAdapter() + viewBinding.apply { + + titleTv.text = film.name + ratingFilm.rating = film.rating.toFloat() + descriptionTV.text = film.description + genreFilmTv.text = film.genre + studioFilm.text = film.studio + yearFilmTv.text = film.year + + recyclerViewActor.apply { + adapter = actorAdapter + layoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false) + addItemDecoration(MyItemDecorator(), RecyclerView.HORIZONTAL) + } + + backButton.setOnClickListener { + parentFragmentManager.popBackStack() + } + } + + } + + + override fun onDestroy() { + _viewBinding = null + super.onDestroy() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uzlov/moviefind/fragments/PopularFilmsFragment.kt b/app/src/main/java/com/uzlov/moviefind/fragments/PopularFilmsFragment.kt index f7af0fa..6a060a3 100644 --- a/app/src/main/java/com/uzlov/moviefind/fragments/PopularFilmsFragment.kt +++ b/app/src/main/java/com/uzlov/moviefind/fragments/PopularFilmsFragment.kt @@ -1,7 +1,6 @@ package com.uzlov.moviefind.fragments import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -10,17 +9,19 @@ import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.uzlov.moviefind.R import com.uzlov.moviefind.databinding.PopularFilmsFragmentBinding import com.uzlov.moviefind.model.TestFilm +import com.uzlov.moviefind.ui.MyItemDecorator import com.uzlov.moviefind.ui.PopularFilmsAdapter import com.uzlov.moviefind.viewmodels.FilmsViewModel -class PopularFilmsFragment : Fragment() { +class PopularFilmsFragment : Fragment(), OnClickListenerAdapter { private lateinit var viewModel: FilmsViewModel private var _viewBinding: PopularFilmsFragmentBinding?=null private val viewBinding get() = _viewBinding!! - + private val films:ArrayList = ArrayList() private lateinit var popularFilmsAdapter : PopularFilmsAdapter override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { @@ -30,10 +31,14 @@ class PopularFilmsFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - popularFilmsAdapter = PopularFilmsAdapter() + popularFilmsAdapter = PopularFilmsAdapter(this) viewModel = ViewModelProvider(this).get(FilmsViewModel::class.java) viewModel.getPopularFilms().observe(viewLifecycleOwner, { showLoadedFilms(it) + films.apply { + clear() + addAll(it) + } }) } @@ -42,12 +47,25 @@ class PopularFilmsFragment : Fragment() { viewBinding.recyclerView.apply { layoutManager = LinearLayoutManager(requireContext()) adapter = popularFilmsAdapter - addItemDecoration(DividerItemDecoration(requireContext(), RecyclerView.VERTICAL)) + addItemDecoration(MyItemDecorator(RecyclerView.VERTICAL)) } } override fun onDestroy() { - super.onDestroy() _viewBinding = null + super.onDestroy() } + + override fun onClick(position: Int) { + parentFragmentManager.beginTransaction() + .hide(this) + .replace(R.id.fragment_container, FilmFragment.newInstance(films[position])) + .addToBackStack(null) + .commit() + } + + +} +interface OnClickListenerAdapter{ + fun onClick(position: Int) } \ No newline at end of file diff --git a/app/src/main/java/com/uzlov/moviefind/model/TestFilm.kt b/app/src/main/java/com/uzlov/moviefind/model/TestFilm.kt index 3669d07..704ca3f 100644 --- a/app/src/main/java/com/uzlov/moviefind/model/TestFilm.kt +++ b/app/src/main/java/com/uzlov/moviefind/model/TestFilm.kt @@ -1,3 +1,40 @@ package com.uzlov.moviefind.model -data class TestFilm(val name:String, val genre:String) \ No newline at end of file +import android.os.Parcel +import android.os.Parcelable + +data class TestFilm(val name:String = "", val genre:String = "", val rating: Double = 0.0, + val description: String = "", val studio: String = "", val year: String = "") : Parcelable { + constructor(parcel: Parcel) : this( + parcel.readString() ?: "", + parcel.readString() ?: "", + parcel.readDouble(), + parcel.readString() ?: "", + parcel.readString() ?: "", + parcel.readString() ?: "" + ) { + } + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeString(name) + parcel.writeString(genre) + parcel.writeDouble(rating) + parcel.writeString(description) + parcel.writeString(studio) + parcel.writeString(year) + } + + override fun describeContents(): Int { + return 0 + } + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): TestFilm { + return TestFilm(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uzlov/moviefind/ui/ActorFilmsAdapter.kt b/app/src/main/java/com/uzlov/moviefind/ui/ActorFilmsAdapter.kt new file mode 100644 index 0000000..2e089cd --- /dev/null +++ b/app/src/main/java/com/uzlov/moviefind/ui/ActorFilmsAdapter.kt @@ -0,0 +1,41 @@ +package com.uzlov.moviefind.ui + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import com.uzlov.moviefind.R +import com.uzlov.moviefind.databinding.ItemActorBinding + +class ActorFilmsAdapter : RecyclerView.Adapter() { + private val mListFilms:MutableList = mutableListOf() + + init { + mListFilms.add("Арнольд \n Цварцнеггер") + mListFilms.add("Майкл \n Бин") + mListFilms.add("Линда \n Хэмилтон") + mListFilms.add("Поп \n Уинфилд") + mListFilms.add("Лэн \n Хенриксен") + mListFilms.add("Бесс \n Мотта") + mListFilms.add("Эрл \n Боэн") + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ActorFilmsHolder { + val binding = ItemActorBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return ActorFilmsHolder(binding) + } + + override fun onBindViewHolder(holder: ActorFilmsHolder, position: Int) { + holder.onBind(mListFilms[position]) + } + + override fun getItemCount(): Int = mListFilms.size + +} + +class ActorFilmsHolder(private val binding: ItemActorBinding) : RecyclerView.ViewHolder(binding.root) { + fun onBind(actor : String){ + binding.imageActor.background = ContextCompat.getDrawable(binding.root.context, R.drawable.actor) + binding.actorName.text = actor + } +} diff --git a/app/src/main/java/com/uzlov/moviefind/ui/MyItemDecorator.kt b/app/src/main/java/com/uzlov/moviefind/ui/MyItemDecorator.kt new file mode 100644 index 0000000..25e2012 --- /dev/null +++ b/app/src/main/java/com/uzlov/moviefind/ui/MyItemDecorator.kt @@ -0,0 +1,14 @@ +package com.uzlov.moviefind.ui + +import android.graphics.Rect +import androidx.recyclerview.widget.RecyclerView + +class MyItemDecorator(private val orientation: Int = 1) : RecyclerView.ItemDecoration() { + override fun getItemOffsets(outRect: Rect, itemPosition: Int, parent: RecyclerView) { + when(orientation) { + RecyclerView.HORIZONTAL -> outRect.set(Rect(16, 0, 16, 0)) + RecyclerView.VERTICAL -> outRect.set(Rect(0, 16, 0, 16)) + else -> outRect.set(Rect(16, 16, 16, 16)) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/uzlov/moviefind/ui/PopularFilmsAdapter.kt b/app/src/main/java/com/uzlov/moviefind/ui/PopularFilmsAdapter.kt index 132db5a..c184205 100644 --- a/app/src/main/java/com/uzlov/moviefind/ui/PopularFilmsAdapter.kt +++ b/app/src/main/java/com/uzlov/moviefind/ui/PopularFilmsAdapter.kt @@ -1,26 +1,23 @@ package com.uzlov.moviefind.ui -import android.content.Context import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView -import com.uzlov.moviefind.R import com.uzlov.moviefind.databinding.ItemFilmBinding -import com.uzlov.moviefind.databinding.PopularFilmsFragmentBinding -import com.uzlov.moviefind.model.Result +import com.uzlov.moviefind.fragments.OnClickListenerAdapter import com.uzlov.moviefind.model.TestFilm -class PopularFilmsAdapter : RecyclerView.Adapter() { - private val mListFilms:MutableList = mutableListOf() +class PopularFilmsAdapter(var listenerClick: OnClickListenerAdapter) : + RecyclerView.Adapter() { + private val mListFilms: MutableList = mutableListOf() - fun addFilm(film : TestFilm ){ + fun addFilm(film: TestFilm) { mListFilms.add(film) notifyItemInserted(mListFilms.size) } - fun setTestFilms(films : List){ + fun setTestFilms(films: List) { mListFilms.apply { clear() addAll(films) @@ -38,13 +35,20 @@ class PopularFilmsAdapter : RecyclerView.Adapter() { holder.onBind(mListFilms[position]) } - override fun getItemCount(): Int = mListFilms.size - -} - -class PopularFilmsHolder(private val binding: ItemFilmBinding) : RecyclerView.ViewHolder(binding.root) { - fun onBind(film : TestFilm){ - binding.nameFilmTV.text = film.name - binding.genreFilmTV.text = film.genre + override fun getItemCount(): Int = mListFilms.size + + inner class PopularFilmsHolder(private val binding: ItemFilmBinding) : + RecyclerView.ViewHolder(binding.root) { + fun onBind(film: TestFilm) { + binding.apply { + nameFilmTV.text = film.name + genreFilmTVLabel.text = film.genre + root.setOnClickListener { + listenerClick.onClick(adapterPosition) + } + } + } } } + + diff --git a/app/src/main/java/com/uzlov/moviefind/viewmodels/FilmsViewModel.kt b/app/src/main/java/com/uzlov/moviefind/viewmodels/FilmsViewModel.kt index d1cd4f8..e545024 100644 --- a/app/src/main/java/com/uzlov/moviefind/viewmodels/FilmsViewModel.kt +++ b/app/src/main/java/com/uzlov/moviefind/viewmodels/FilmsViewModel.kt @@ -10,21 +10,36 @@ class FilmsViewModel(private val liveDataToObserve: MutableLiveData>{ - getLocalData() + getLocalDataFilms() return liveDataToObserve } - private fun getLocalData(){ + private fun getLocalDataFilms(){ Thread { - sleep(2000) + sleep(1000) liveDataToObserve.postValue(listOf( - TestFilm("Бойцовский клуб","Боевик"), - TestFilm("Пила 2","Ужасы"), - TestFilm("Большой куш","Боевик"), - TestFilm("1+1","Комедия, драма"), - TestFilm("Терминатор","Боевик") - )) + TestFilm("Бойцовский клуб","Боевик", 4.9, + "Тон фильму задают начальные кадры: показано неистовое движение нервного импульса (который можно трактовать как боль, страх или мысль) по лабиринту нервных волокон в мозговой ткани Рассказчика[3]. Уже в этих кадрах содержится намёк на суть показанного далее.", + "20 Century Fox", + "1999"), + TestFilm("Пила 2","Ужасы",3.5, + "Майкл приходит в себя в комнате, на голове у него раскрытая маска с шипами внутри («Маска смерти»). Включается телевизор, на экране появляется кукла Билли и она говорит Майклу, что тот — доносчик и стукач. Маска захлопнется и убьёт его, если он за минуту не успеет отыскать ключ, зашитый в его правую глазницу, скальпель прилагается. Сделав несколько попыток, Майкл понимает, что не сможет выколоть свой глаз, и маска, захлопнувшись, убивает его.", + "Lionsgate Films", + "2005"), + TestFilm("Большой куш","Боевик, комедия", 4.1, + "В Антверпене банда грабителей, переодетых в религиозных евреев, один из которых — Фрэнки «Четыре пальца» (Бенисио дель Торо), похищает из еврейской ювелирной конторы множество драгоценностей, среди которых бриллиант в 86 карат. Фрэнки предстоит доставить это сокровище в пристёгиваемом к руке бронированном дипломате с кодовой защитой прикрывающему эту банду ювелиру Ави Деновицу (Дэннис Фарина) в Нью-Йорк, транзитом через Лондон. ", + "Columbia Pictures", + "2000"), + TestFilm("1+1","Комедия, драма", 4.3, + "Парализованный богатый аристократ Филипп, ставший инвалидом после того, как разбился на параплане, ищет себе помощника, который должен за ним ухаживать. Одного из кандидатов, чернокожего Дрисса, работа не интересует — ему нужен формальный письменный отказ, чтобы продолжать получать пособие по безработице. Но неожиданно именно его Филипп берёт на работу.", + "Gaumont", + "2011" + ), + TestFilm("Терминатор","Боевик", 4.5, + "История противостояния солдата Кайла Риза и киборга-терминатора, прибывших в 1984-й год из пост-апокалиптического будущего, где миром правят машины-убийцы, а человечество находится на грани вымирания. Цель киборга: убить девушку по имени Сара Коннор, чей ещё нерождённый сын к 2029 году выиграет войну человечества с машинами. Цель Риза: спасти Сару и остановить Терминатора любой ценой.", + "Warner", + "1984")) + ) }.start() - } } \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/actor.PNG b/app/src/main/res/drawable-v24/actor.PNG new file mode 100644 index 0000000..e00a121 Binary files /dev/null and b/app/src/main/res/drawable-v24/actor.PNG differ diff --git a/app/src/main/res/drawable-v24/ic_favorite_white.xml b/app/src/main/res/drawable-v24/ic_favorite_white.xml new file mode 100644 index 0000000..20a157a --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_favorite_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v24/ter.jpg b/app/src/main/res/drawable-v24/ter.jpg new file mode 100644 index 0000000..bf52d20 Binary files /dev/null and b/app/src/main/res/drawable-v24/ter.jpg differ diff --git a/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml b/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml new file mode 100644 index 0000000..0cfc1ca --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_favorite_border_24.xml b/app/src/main/res/drawable/ic_baseline_favorite_border_24.xml new file mode 100644 index 0000000..faca1cc --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_favorite_border_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_home.xml b/app/src/main/res/drawable/ic_baseline_home.xml new file mode 100644 index 0000000..3a4c7da --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_home.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_settings_24.xml b/app/src/main/res/drawable/ic_baseline_settings_24.xml new file mode 100644 index 0000000..b240b83 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_settings_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_favorite.xml b/app/src/main/res/drawable/ic_favorite.xml new file mode 100644 index 0000000..52d4d9b --- /dev/null +++ b/app/src/main/res/drawable/ic_favorite.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d016ec2..4723548 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -9,30 +9,13 @@ tools:viewBindingIgnore="false" tools:context=".HostActivity"> - - - - diff --git a/app/src/main/res/layout/fragment_film.xml b/app/src/main/res/layout/fragment_film.xml new file mode 100644 index 0000000..9178a63 --- /dev/null +++ b/app/src/main/res/layout/fragment_film.xml @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_actor.xml b/app/src/main/res/layout/item_actor.xml new file mode 100644 index 0000000..16ed1b0 --- /dev/null +++ b/app/src/main/res/layout/item_actor.xml @@ -0,0 +1,22 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_film.xml b/app/src/main/res/layout/item_film.xml index 6ee38dd..ed1ea3d 100644 --- a/app/src/main/res/layout/item_film.xml +++ b/app/src/main/res/layout/item_film.xml @@ -1,22 +1,38 @@ - + android:layout_height="wrap_content" + app:cardCornerRadius="6dp" + android:layout_marginStart="6dp" + android:layout_marginEnd="6dp" + app:cardElevation="4dp"> - + android:orientation="vertical" + android:padding="6dp"> - - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main_film.xml b/app/src/main/res/menu/main_film.xml new file mode 100644 index 0000000..521232c --- /dev/null +++ b/app/src/main/res/menu/main_film.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml new file mode 100644 index 0000000..7594b7a --- /dev/null +++ b/app/src/main/res/values-night/colors.xml @@ -0,0 +1,4 @@ + + + #00FFFFFF + \ No newline at end of file diff --git a/app/src/main/res/values-night/dimens.xml b/app/src/main/res/values-night/dimens.xml new file mode 100644 index 0000000..f4b216a --- /dev/null +++ b/app/src/main/res/values-night/dimens.xml @@ -0,0 +1,6 @@ + + + 400dp + 32sp + 16dp + \ No newline at end of file diff --git a/app/src/main/res/values-night/strings.xml b/app/src/main/res/values-night/strings.xml index 3428588..909bb10 100644 --- a/app/src/main/res/values-night/strings.xml +++ b/app/src/main/res/values-night/strings.xml @@ -2,4 +2,12 @@ Круто! Спасибо + Настройки + Любимые + Главная + В разработке + История противостояния солдата Кайла Риза и киборга-терминатора, прибывших в 1984-й год из пост-апокалиптического будущего, где миром правят машины-убийцы, а человечество находится на грани вымирания. Цель киборга: убить девушку по имени Сара Коннор, чей ещё нерождённый сын к 2029 году выиграет войну человечества с машинами. Цель Риза: спасти Сару и остановить Терминатора любой ценой. + Жанр + Студия + Смотреть \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f8c6127..0048069 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,10 +1,11 @@ #FFBB86FC - #FF6200EE - #FF3700B3 + #FFC400 + #FF9100 #FF03DAC5 #FF018786 #FF000000 #FFFFFFFF + #00FFFFFF \ No newline at end of file diff --git a/app/src/main/res/values/custom_styles.xml b/app/src/main/res/values/custom_styles.xml new file mode 100644 index 0000000..0242c79 --- /dev/null +++ b/app/src/main/res/values/custom_styles.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 125df87..789933d 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,3 +1,9 @@ 16dp + 16dp + 400dp + 400dp + 40dp + 32sp + 16dp \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e698a11..ea37d57 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6,4 +6,103 @@ Скоро тут будут фильмы… Круто! Спасибо + Настройки + Любимые + Главная + В разработке + + "Material is the metaphor.\n\n" + + "A material metaphor is the unifying theory of a rationalized space and a system of motion." + "The material is grounded in tactile reality, inspired by the study of paper and ink, yet " + "technologically advanced and open to imagination and magic.\n" + "Surfaces and edges of the material provide visual cues that are grounded in reality. The " + "use of familiar tactile attributes helps users quickly understand affordances. Yet the " + "flexibility of the material creates new affordances that supercede those in the physical " + "world, without breaking the rules of physics.\n" + "The fundamentals of light, surface, and movement are key to conveying how objects move, " + "interact, and exist in space and in relation to each other. Realistic lighting shows " + "seams, divides space, and indicates moving parts.\n\n" + + "Bold, graphic, intentional.\n\n" + + "The foundational elements of print based design typography, grids, space, scale, color, " + "and use of imagery guide visual treatments. These elements do far more than please the " + "eye. They create hierarchy, meaning, and focus. Deliberate color choices, edge to edge " + "imagery, large scale typography, and intentional white space create a bold and graphic " + "interface that immerse the user in the experience.\n" + "An emphasis on user actions makes core functionality immediately apparent and provides " + "waypoints for the user.\n\n" + + "Motion provides meaning.\n\n" + + "Motion respects and reinforces the user as the prime mover. Primary user actions are " + "inflection points that initiate motion, transforming the whole design.\n" + "All action takes place in a single environment. Objects are presented to the user without " + "breaking the continuity of experience even as they transform and reorganize.\n" + "Motion is meaningful and appropriate, serving to focus attention and maintain continuity. " + "Feedback is subtle yet clear. Transitions are efficient yet coherent.\n\n" + + "3D world.\n\n" + + "The material environment is a 3D space, which means all objects have x, y, and z " + "dimensions. The z-axis is perpendicularly aligned to the plane of the display, with the " + "positive z-axis extending towards the viewer. Every sheet of material occupies a single " + "position along the z-axis and has a standard 1dp thickness.\n" + "On the web, the z-axis is used for layering and not for perspective. The 3D world is " + "emulated by manipulating the y-axis.\n\n" + + "Light and shadow.\n\n" + + "Within the material environment, virtual lights illuminate the scene. Key lights create " + "directional shadows, while ambient light creates soft shadows from all angles.\n" + "Shadows in the material environment are cast by these two light sources. In Android " + "development, shadows occur when light sources are blocked by sheets of material at " + "various positions along the z-axis. On the web, shadows are depicted by manipulating the " + "y-axis only. The following example shows the card with a height of 6dp.\n\n" + + "Resting elevation.\n\n" + + "All material objects, regardless of size, have a resting elevation, or default elevation " + "that does not change. If an object changes elevation, it should return to its resting " + "elevation as soon as possible.\n\n" + + "Component elevations.\n\n" + + "The resting elevation for a component type is consistent across apps (e.g., FAB elevation " + "does not vary from 6dp in one app to 16dp in another app).\n" + "Components may have different resting elevations across platforms, depending on the depth " + "of the environment (e.g., TV has a greater depth than mobile or desktop).\n\n" + + "Responsive elevation and dynamic elevation offsets.\n\n" + + "Some component types have responsive elevation, meaning they change elevation in response " + "to user input (e.g., normal, focused, and pressed) or system events. These elevation " + "changes are consistently implemented using dynamic elevation offsets.\n" + "Dynamic elevation offsets are the goal elevation that a component moves towards, relative " + "to the component’s resting state. They ensure that elevation changes are consistent " + "across actions and component types. For example, all components that lift on press have " + "the same elevation change relative to their resting elevation.\n" + "Once the input event is completed or cancelled, the component will return to its resting " + "elevation.\n\n" + + "Avoiding elevation interference.\n\n" + + "Components with responsive elevations may encounter other components as they move between " + "their resting elevations and dynamic elevation offsets. Because material cannot pass " + "through other material, components avoid interfering with one another any number of ways, " + "whether on a per component basis or using the entire app layout.\n" + "On a component level, components can move or be removed before they cause interference. " + "For example, a floating action button (FAB) can disappear or move off screen before a " + "user picks up a card, or it can move if a snackbar appears.\n" + "On the layout level, design your app layout to minimize opportunities for interference. " + "For example, position the FAB to one side of stream of a cards so the FAB won’t interfere " + "when a user tries to pick up one of cards.\n\n" + + ScrollingActivity + История противостояния солдата Кайла Риза и киборга-терминатора, прибывших в 1984-й год из пост-апокалиптического будущего, где миром правят машины-убийцы, а человечество находится на грани вымирания. Цель киборга: убить девушку по имени Сара Коннор, чей ещё нерождённый сын к 2029 году выиграет войну человечества с машинами. Цель Риза: спасти Сару и остановить Терминатора любой ценой. + Жанр + Студия + Год + Смотреть \ No newline at end of file