IOS를 사랑하는 AOS 개발자
[Android] 안드로이드 RecyclerView로 인스타그램 만들어보기 ( feat.Adapter ) 본문
Android ( JAVA )/개발
[Android] 안드로이드 RecyclerView로 인스타그램 만들어보기 ( feat.Adapter )
아사안개 2022. 1. 5. 14:48반응형
SMALL
👼🏻 초보 안드로이드 개발자가 매번 구글링하기 싫어서 정리하는 블로그 👼🏻
안녕하세요! 🙋🏻♀️
이번엔 List 형식의 마지막! RecyclerView 를 사용해서 인스타그램비스무리한거 만들어볼거에요!!
( ❌ 인스타그램을 안해서.... 좀 허접하게 보일 수 있는것 주의 ❌ )
일단 구현 영상부터 갑니다욧!
아이콘은 icons8 에서 가져왔습니다.
이미지는 제가 직접 만들었습니다.
( 제 착각일수도있지만 ) 인스타랑 좀 비슷하지 않나요...?
아님말구!!!!!!!!!!!! 갑시다!!!!!!!!!!!!!!!
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1"
android:gravity="center"
android:background="#B332530C"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="인⭐️그램"
android:textColor="@color/white"
android:textSize="20dp"
android:gravity="center"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="9"
android:paddingTop="10dp"
>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rc_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
</LinearLayout>
정말 간단하죠??
RecyclerView 에 들어가는 리스트 한칸한칸을 커스텀을 해줄거에요!!
card_view.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/card_view"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_margin="10dp"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="10dp"
>
<ImageView
android:id="@+id/iv_profile"
android:layout_width="150px"
android:layout_height="150px"
android:src="@drawable/profile"
/>
<TextView
android:id="@+id/tv_profile_name"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="아사안개"
android:textSize="15dp"
android:textStyle="bold"
android:gravity="center"
android:paddingLeft="20dp"
/>
</LinearLayout>
<ImageView
android:id="@+id/iv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/recycle"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="10dp"
>
<ImageView
android:layout_width="100px"
android:layout_height="100px"
android:src="@drawable/heart"
android:background="@color/white"
android:layout_marginRight="10dp"
/>
<ImageView
android:layout_width="100px"
android:layout_height="100px"
android:src="@drawable/message"
android:background="@color/white"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="right"
>
<ImageView
android:layout_width="100px"
android:layout_height="100px"
android:src="@drawable/bookmark"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
보통 저는 제일 큰 레이아웃을 LinearLayout 으로 많이 감싸는데,
이번에 한건 CardView 라는 위젯을 쓴거에요!
그럼 영상처럼 리스트 한칸한칸이 카드처럼 보일 수 있어요!!!
반응형
이제 열심히 그린 뷰를 연결 해 줍시다!
어디부터?
어뎁터부터 😉
RecyclerAdapter
import android.app.AlertDialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.recyclerview.widget.RecyclerView;
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
// 전역변수 선언
// 리스트의 각 한칸한칸 이미지 배열 선언
private int[] contentImg = { R.drawable.recycle1, R.drawable.recycle2, R.drawable.recycle3,
R.drawable.recycle4, R.drawable.recycle5, R.drawable.recycle6 };
private Context mContext;
// 생성자
public RecyclerAdapter(Context mContext) {
this.mContext = mContext;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view,parent,false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.iv_content.setImageResource(contentImg[position]);
}
@Override
public int getItemCount() {
return contentImg.length;
}
// 뷰홀더 생성 필수!
public class ViewHolder extends RecyclerView.ViewHolder{
public ImageView iv_content;
public ViewHolder(View itemView) {
super(itemView);
iv_content = itemView.findViewById(R.id.iv_content);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition(); // 리스트 중 어느걸 선택했는지
View dialogView = View.inflate(mContext, R.layout.dialog,null);
AlertDialog.Builder dlg = new AlertDialog.Builder(mContext);
ImageView iv_content_alert = dialogView.findViewById(R.id.iv_content_alert);
iv_content_alert.setImageResource(contentImg[position]);
dlg.setView(dialogView);
dlg.show();
}
});
}
}
}
처음으로 등장한 RecyclerView.Adapter 는 ViewHolder 를 이용해서 생성가능합니다!
그러므로 ViewHolder 는 필수입니다!!!!!
SMALL
어뎁터가 생성이 되었으니 사용해봅시다!
MainActivity
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
// 전역변수
RecyclerView rc_view;
RecyclerView.LayoutManager layoutManager;
RecyclerView.Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// xml 연결
rc_view = findViewById(R.id.rc_view);
// LayoutManager 준비 및 연결
layoutManager = new LinearLayoutManager(this);
rc_view.setLayoutManager(layoutManager);
// adapter 준비 및 연결
adapter = new RecyclerAdapter(MainActivity.this);
rc_view.setAdapter(adapter);
}
}
짜잔! 이렇게 준비된걸 다 쓰게되면 끝!!!!!!!!!
RecyclerView 는 아주 유용하게, 많은 기능을 사용할 수 있기에 자주 씁니다!
많은 곳에서 사용해보세요!!!
오늘도 끝!
감사합니다 🥰
반응형
LIST
'Android ( JAVA ) > 개발' 카테고리의 다른 글
[Android] 안드로이드 JSON 사용하기 (feat.RecyclerView) (0) | 2022.01.17 |
---|---|
[Android] 안드로이드 WebView 사용하기 (0) | 2022.01.11 |
[Android] 안드로이드 TabLayout + Fragment ( feat.Adapter ) (0) | 2022.01.05 |
[Android] 안드로이드 BottomSheet ( feat.Fragment ) (0) | 2022.01.04 |
[Android] 안드로이드 Activity 이동 2탄 ( feat. Intent, putExtra, getStringExtra ) (0) | 2022.01.03 |
Comments