hyeals study
인스타그램 클론 (사진 페이지) 본문
- 격자 무늬의 사진 페이지 만들기
[1] layout폴더의 fragment_grid.xml 파일을 아래와 같이 만듦
[2] GridFragment.kt로 이동해서 Fragment에 RecyclerView를 만듦 ( RecyclerView를 만드는 것은 UserFragment에 있는 UserFragmentRecyclerViewAdapter 동일함)
- 따라서 GridFragment.kt의 코드는 아래와 같음
package com.example.hyealsinstargram.navigation
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.appcompat.widget.LinearLayoutCompat
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
import com.example.hyealsinstargram.R
import com.example.hyealsinstargram.navigation.model.ContentDTO
import com.google.firebase.firestore.FirebaseFirestore
import com.google.firebase.storage.FirebaseStorage
import kotlinx.android.synthetic.main.fragment_grid.view.*
class GridFragment :Fragment(){
var firestore : FirebaseFirestore? = null
var fragmentView: View? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
var fragmentView = LayoutInflater.from(activity).inflate(R.layout.fragment_grid,container,false)
firestore = FirebaseFirestore.getInstance()
fragmentView?.gridfragment_recyclerview?.adapter = UserFragmentRecyclerViewAdapter()
fragmentView?.gridfragment_recyclerview?.layoutManager = GridLayoutManager(activity, 3)
return fragmentView
}
inner class UserFragmentRecyclerViewAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
val contentDTOs: ArrayList<ContentDTO> = arrayListOf()
init {
firestore?.collection("images")?.addSnapshotListener { querySnapshot, firebaseFirestoreException ->
contentDTOs.clear()
// Sometimes, This code return null of querySnapshot when it signout
if (querySnapshot == null)
return@addSnapshotListener
// Get data
for (snapshot in querySnapshot?.documents!!) {
contentDTOs.add(snapshot.toObject(ContentDTO::class.java)!!)
}
notifyDataSetChanged()
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val width = resources.displayMetrics.widthPixels / 3
val imageView = ImageView(parent.context)
imageView.layoutParams = LinearLayoutCompat.LayoutParams(width,width)
return CustomViewHolder(imageView)
}
inner class CustomViewHolder(var imageView: ImageView) : RecyclerView.ViewHolder(imageView)
override fun getItemCount(): Int {
return contentDTOs.size
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
var imageView = (holder as CustomViewHolder).imageView
Glide.with(holder.itemView.context).load(contentDTOs[position].imageUrl).apply(
RequestOptions().centerCrop()).into(imageView)
}
}
}
[3] 프로젝트를 실행한 후, 아래 빨간 동그라미로 표시한 부분을 클릭하게 되면 사진이 격자형으로 나오는 것을 확인할 수 있음
'안드로이드' 카테고리의 다른 글
인스타그램 클론 (알림 이벤트) (0) | 2020.04.14 |
---|---|
인스타그램 클론 (댓글 페이지) (0) | 2020.04.13 |
인스타그램 클론 (사용자 페이지3) (0) | 2020.04.10 |
인스타그램 클론 (사용자 페이지2) (0) | 2020.04.09 |
인스타그램 클론 (사용자 페이지 1) (0) | 2020.04.08 |
Comments