diff --git a/app/src/main/java/com/timber/soft/myemoticon/MainActivity.kt b/app/src/main/java/com/timber/soft/myemoticon/MainActivity.kt index f31c689..e3112c1 100644 --- a/app/src/main/java/com/timber/soft/myemoticon/MainActivity.kt +++ b/app/src/main/java/com/timber/soft/myemoticon/MainActivity.kt @@ -4,15 +4,22 @@ import android.content.Intent import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.graphics.Color +import android.graphics.Typeface import android.net.Uri import android.os.Build import android.os.Bundle +import android.util.TypedValue +import android.view.Gravity import android.view.View +import android.widget.TextView import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat import androidx.core.view.GravityCompat import androidx.drawerlayout.widget.DrawerLayout import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentPagerAdapter +import com.google.android.material.tabs.TabLayout import com.timber.soft.myemoticon.databinding.ActivityMainBinding import com.timber.soft.myemoticon.model.RootDataModel import com.timber.soft.myemoticon.tools.AppTools @@ -76,16 +83,57 @@ class MainActivity : AppCompatActivity() { AppTools.parseJsonFile(assets.open("data.json")) ) rootModelList.shuffle() + for (i in rootModelList) { binding.tabLayout.addTab( - binding.tabLayout.newTab().setCustomView(R.layout.item_custom_tab) + binding.tabLayout.newTab() ) } + for (i in 0 until binding.tabLayout.tabCount) { + val rootDataModel = rootModelList[i] + fragmentList.add(MainViewPagerFragment(rootDataModel)) + } + binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabSelected(p0: TabLayout.Tab?) { + val textView = TextView(this@MainActivity) + val selectedSize = TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_PX, 24f, resources.displayMetrics + ) + textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, selectedSize) + textView.typeface = Typeface.defaultFromStyle(Typeface.BOLD) //加粗 + textView.setTextColor(ContextCompat.getColor(this@MainActivity, R.color.main_color)) + textView.text = p0!!.text + p0.customView = textView + } + override fun onTabUnselected(p0: TabLayout.Tab?) { + p0?.customView = null + } + + override fun onTabReselected(p0: TabLayout.Tab?) { + } + }) + + binding.viewpager.offscreenPageLimit = 3 + binding.viewpager.adapter = object : FragmentPagerAdapter(supportFragmentManager) { + override fun getCount(): Int { + return fragmentList.size + } + + override fun getItem(position: Int): Fragment { + return fragmentList[position] + } + + override fun getPageTitle(position: Int): CharSequence { + return rootModelList[position].categoryName + } + } + binding.tabLayout.setupWithViewPager(binding.viewpager) } + private fun getVersionName(): String { val pInfo: PackageInfo try { diff --git a/app/src/main/java/com/timber/soft/myemoticon/MainViewPagerFragment.kt b/app/src/main/java/com/timber/soft/myemoticon/MainViewPagerFragment.kt new file mode 100644 index 0000000..11495fe --- /dev/null +++ b/app/src/main/java/com/timber/soft/myemoticon/MainViewPagerFragment.kt @@ -0,0 +1,107 @@ +package com.timber.soft.myemoticon + +import android.content.Context +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.cardview.widget.CardView +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager.VERTICAL +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.StaggeredGridLayoutManager +import com.timber.soft.myemoticon.model.ChildDataModel +import com.timber.soft.myemoticon.model.RootDataModel + +class MainViewPagerFragment(private val rootModel: RootDataModel) : Fragment() { + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + val view = inflater.inflate(R.layout.fragment_main, container, false) + val recyclerViewList: RecyclerView = view.findViewById(R.id.recycler_list) + recyclerViewList.layoutManager = StaggeredGridLayoutManager(2, VERTICAL) + val pagerAdapter = MainHomeCardAdapter(requireContext(), + rootModel, + object : MainHomeCardAdapter.OnItemClickListener { + override fun onItemClick(position: Int, childModel: ChildDataModel) { +// val intent = Intent(requireContext(), DetailsActivity::class.java) +// intent.putExtra("KEY_EXTRA", dataModel) +// startActivity(intent) + Log.d("onClick", "item has been click!") + } + }) + + recyclerViewList.adapter = pagerAdapter + return view + } +} + +class MainHomeCardAdapter( + private val context: Context, + private val model: RootDataModel, + private val listener: OnItemClickListener +) : RecyclerView.Adapter() { + private val childModels = model.childList + + inner class PreViewHolder(view: View) : RecyclerView.ViewHolder(view) { + val iconName: TextView = itemView.findViewById(R.id.icon_name) + val rootCard: CardView = itemView.findViewById(R.id.item_home_car) + val recyclerPreview: RecyclerView = itemView.findViewById(R.id.recycler_preview) + } + + interface OnItemClickListener { + fun onItemClick(position: Int, childModel: ChildDataModel) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PreViewHolder { + val view = LayoutInflater.from(context).inflate(R.layout.item_home_card, parent, false) + return PreViewHolder(view) + } + + override fun getItemCount(): Int { + return childModels.size + } + + override fun onBindViewHolder(holder: PreViewHolder, position: Int) { + val childModel = childModels[position] + holder.iconName.text = childModel.identifierName + + holder.recyclerPreview.layoutManager = StaggeredGridLayoutManager(2, VERTICAL) + + val cardImgAdapter = CardImgAdapter(context, childModel.previewList, childModel.count) + + holder.recyclerPreview.adapter = cardImgAdapter + + holder.rootCard.setOnClickListener() { + listener.onItemClick(position, childModel) + } + } +} + +class CardImgAdapter( + private val context: Context, + private val urlList: List, + private val imgCount: Int + +) : RecyclerView.Adapter() { + + inner class ImgViewHolder(view: View) : RecyclerView.ViewHolder(view) { + + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ImgViewHolder { + + } + + override fun getItemCount(): Int { + + } + + override fun onBindViewHolder(holder: ImgViewHolder, position: Int) { + + } + +} \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_main_pre_count.xml b/app/src/main/res/drawable/shape_main_pre_count.xml new file mode 100644 index 0000000..ef0ea1f --- /dev/null +++ b/app/src/main/res/drawable/shape_main_pre_count.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_theme_color.xml b/app/src/main/res/drawable/shape_main_pre_img.xml similarity index 62% rename from app/src/main/res/drawable/shape_theme_color.xml rename to app/src/main/res/drawable/shape_main_pre_img.xml index bcacc99..7d259ed 100644 --- a/app/src/main/res/drawable/shape_theme_color.xml +++ b/app/src/main/res/drawable/shape_main_pre_img.xml @@ -1,8 +1,7 @@ - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index fa3bb8b..83f396d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -22,8 +22,8 @@ android:id="@+id/bt_menu" android:layout_width="40dp" android:layout_height="40dp" - android:layout_marginStart="7dp" - android:padding="8dp" + android:layout_marginStart="4dp" + android:padding="10dp" android:src="@drawable/svg_menu" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -44,21 +44,20 @@ + app:tabIndicatorColor="@color/main_color" + app:tabMode="scrollable" + app:tabSelectedTextColor="@color/main_color" /> @@ -76,6 +75,7 @@ android:id="@+id/topPanel" android:layout_width="match_parent" android:layout_height="160dp" + android:background="@color/main_bg_color" android:paddingBottom="14dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent"> diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml new file mode 100644 index 0000000..92b6e8d --- /dev/null +++ b/app/src/main/res/layout/fragment_main.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_custom_tab.xml b/app/src/main/res/layout/item_custom_tab.xml deleted file mode 100644 index 6d6d914..0000000 --- a/app/src/main/res/layout/item_custom_tab.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_card.xml b/app/src/main/res/layout/item_home_card.xml new file mode 100644 index 0000000..049f30a --- /dev/null +++ b/app/src/main/res/layout/item_home_card.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_card_img.xml b/app/src/main/res/layout/item_home_card_img.xml new file mode 100644 index 0000000..04d45b4 --- /dev/null +++ b/app/src/main/res/layout/item_home_card_img.xml @@ -0,0 +1,33 @@ + + + + + + + + \ 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 cbfb0bd..bfc18e8 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -2,5 +2,8 @@ #FF000000 #FFFFFFFF - #FF9800 + #FF9800 + #80BFEFFF + #FFE4E1 + #1C1C1C \ 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 f1fe8ad..d4b35f4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,4 +3,6 @@ Share our Apps Find us in store https://play.google.com/store/apps/details?id= + Item Name + +6 \ No newline at end of file