diff --git a/app/build.gradle b/app/build.gradle index 767c610..bd21299 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -50,4 +50,6 @@ dependencies { implementation 'com.google.code.gson:gson:2.10.1' + implementation 'com.github.bumptech.glide:glide:4.12.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4a34804..4d97fa9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,7 +2,11 @@ + + + + + private val rootModelList: MutableList = mutableListOf() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -62,7 +63,27 @@ class MainActivity : AppCompatActivity() { initDrawer() - val rootModelList: MutableList = mutableListOf() + initTabLayOut() + + 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].className + } + } + binding.tabLayout.setupWithViewPager(binding.viewpager) + + } + + private fun initTabLayOut() { val result = parseJsonFromAssets(this@MainActivity, "keyboard.json") if (result != null) { rootModelList.addAll(result) @@ -101,28 +122,8 @@ class MainActivity : AppCompatActivity() { // null } }) - - - 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].className - } - } - binding.tabLayout.setupWithViewPager(binding.viewpager) - - } - private fun setTabSize(p0: TabLayout.Tab?) { val textView = TextView(this) //字体样式 diff --git a/app/src/main/java/com/timber/soft/newkeyboard/adapter/MyPagerAdapter.kt b/app/src/main/java/com/timber/soft/newkeyboard/adapter/MyPagerAdapter.kt new file mode 100644 index 0000000..5498dc8 --- /dev/null +++ b/app/src/main/java/com/timber/soft/newkeyboard/adapter/MyPagerAdapter.kt @@ -0,0 +1,77 @@ +package com.timber.soft.newkeyboard.adapter + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions +import com.timber.soft.newkeyboard.R +import com.timber.soft.newkeyboard.model.DataModel +import com.timber.soft.newkeyboard.model.RootModel + +class MyPagerAdapter( + private val context: Context, + private val model: RootModel, + private val listener: OnItemClickListener +) : RecyclerView.Adapter() { + private val dataModels = model.list + + inner class PreViewHolder(view: View) : RecyclerView.ViewHolder(view) { + fun loadPreImg(context: Context, thumb: String, imgItemView: ImageView) { + try { + Glide.with(context).load(thumb) + // 缓存 + .diskCacheStrategy(DiskCacheStrategy.ALL) + // 加载占位图 +// .apply( +// RequestOptions().placeholder(R.drawable.img_loading) +// ) + // 淡入动画 + .transition(DrawableTransitionOptions.withCrossFade()) + // 加载失败占位图 +// .error(R.drawable.img_loading_err) + .into(imgItemView) + } catch (e: Exception) { + e.printStackTrace() + } + } + + // 获取需要渲染图片的item + val imgItemView: ImageView = itemView.findViewById(R.id.image_item) + + // 获取图片根节点 + val rootItemLayout = itemView.findViewById(R.id.root_layout) + } + + + override fun onCreateViewHolder( + parent: ViewGroup, viewType: Int + ): MyPagerAdapter.PreViewHolder { + val view = LayoutInflater.from(context).inflate(R.layout.item_pre_img, parent, false) + return PreViewHolder(view) + } + + override fun onBindViewHolder(holder: MyPagerAdapter.PreViewHolder, position: Int) { + val dataModel = dataModels[position % dataModels.size] + holder.loadPreImg(context, dataModel.thumb, holder.imgItemView) + + holder.rootItemLayout.setOnClickListener() { + listener.onItemClick(position, dataModel) + } + + } + + override fun getItemCount(): Int { + return Int.MAX_VALUE + } + + interface OnItemClickListener { + fun onItemClick(position: Int, dataModel: DataModel) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/timber/soft/newkeyboard/fragment/VPFragment.kt b/app/src/main/java/com/timber/soft/newkeyboard/fragment/VPFragment.kt index ee90faa..f9a3620 100644 --- a/app/src/main/java/com/timber/soft/newkeyboard/fragment/VPFragment.kt +++ b/app/src/main/java/com/timber/soft/newkeyboard/fragment/VPFragment.kt @@ -1,9 +1,53 @@ package com.timber.soft.newkeyboard.fragment +import android.content.Intent +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager.VERTICAL +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.StaggeredGridLayoutManager +import androidx.viewpager.widget.PagerAdapter +import com.timber.soft.newkeyboard.R +import com.timber.soft.newkeyboard.adapter.MyPagerAdapter +import com.timber.soft.newkeyboard.model.DataModel import com.timber.soft.newkeyboard.model.RootModel class VPFragment(private val rootModel: RootModel) : Fragment() { + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + val view = inflater.inflate(R.layout.fragment_pre_recyclerview, container, false) + + val infoRecyclerView: RecyclerView = view.findViewById(R.id.info_recycler_view) + + infoRecyclerView.layoutManager = StaggeredGridLayoutManager(2, VERTICAL) + + val pagerAdapter = MyPagerAdapter( + requireContext(), rootModel, + object : MyPagerAdapter.OnItemClickListener { + override fun onItemClick(position: Int, dataModel: DataModel) { +// val intent = Intent(requireContext(), SetImgActivity::class.java) +// intent.putExtra("KEY_EXTRA", dataModel) + + Log.e("onClick", "item has been click!") + Toast.makeText( + context, + "item has been click!", + Toast.LENGTH_SHORT + ).show() + } + } + ) + + infoRecyclerView.adapter = pagerAdapter + return view + + } } \ 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 ae85a41..0659360 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -58,7 +58,7 @@ android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="0dp" - android:layout_marginTop="4dp" + android:layout_marginTop="8dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@id/tabLayout" /> diff --git a/app/src/main/res/layout/fragment_pre_recyclerview.xml b/app/src/main/res/layout/fragment_pre_recyclerview.xml new file mode 100644 index 0000000..f6561f4 --- /dev/null +++ b/app/src/main/res/layout/fragment_pre_recyclerview.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_pre_img.xml b/app/src/main/res/layout/item_pre_img.xml new file mode 100644 index 0000000..399103e --- /dev/null +++ b/app/src/main/res/layout/item_pre_img.xml @@ -0,0 +1,20 @@ + + + + + + + \ 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 18a5c05..f24d595 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -4,7 +4,7 @@ #FFFFFFFF - #FF9800 + #FFBB86FC \ No newline at end of file