728x90
뷰페이저를 이용해서 한번에 한 아이템만 보여줄수 있는 방식의 리사이클러뷰를 만들어 보려고 합니다.
사용법은 리사이클러뷰와 거의 흡사합니다.
먼저 뷰페이저2를 사용하기 위해서는다음 종속성을 추가해야합니다.
build.gradle(Module:app)
dependencies {
//viewpager2
implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha04'
}
전체 코드 입니다.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
android:background="#000000"
tools:context=".MainActivity">
<androidx.appcompat.widget.AppCompatButton
android:layout_gravity="center"
android:id="@+id/btnToggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="가로로 슬라이드" />
<androidx.viewpager2.widget.ViewPager2
android:layout_weight="1"
android:id="@+id/viewPager2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"/>
</LinearLayout>
뷰페이저를 사용할 액티비티 레이아웃에 뷰페이저 위젯을 삽입해 줍니다.
다음은 뷰페이저에서 보여줄 아이템 화면 레이아웃입니다.
item_viewpager.xml
public class DataPage {
int color;
String title;
public DataPage(int color, String title){
this.color = color;
this.title = title;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
다음은 뷰페이지에 들어갈 변수들을 클래스화한 DataPage 클래스입니다.
public class DataPage {
int color;
String title;
public DataPage(int color, String title){
this.color = color;
this.title = title;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
뷰페이저 어댑터 클래스입니다.
ViewpagerAdapter.java
class ViewPagerAdapter extends RecyclerView.Adapter<ViewHolderPage> {
private ArrayList<DataPage> listData;
ViewPagerAdapter(ArrayList<DataPage> data) {
this.listData = data;
}
@NonNull
@Override
public ViewHolderPage onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
View view = LayoutInflater.from(context).inflate(R.layout.item_viewpager, parent, false);
return new ViewHolderPage(view);
}
@Override
public void onBindViewHolder(ViewHolderPage holder, int position) {
if(holder instanceof ViewHolderPage){
ViewHolderPage viewHolder = (ViewHolderPage) holder;
viewHolder.onBind(listData.get(position));
}
}
@Override
public int getItemCount() {
return listData.size();
}
}
다음은 뷰홀더 클래스입니다.
ViewHolderPager.java
public class ViewHolderPage extends RecyclerView.ViewHolder {
private TextView tv_title;
private RelativeLayout rl_layout;
DataPage data;
ViewHolderPage(View itemView) {
super(itemView);
tv_title = itemView.findViewById(R.id.tv_title);
rl_layout = itemView.findViewById(R.id.rl_layout);
}
public void onBind(DataPage data){
this.data = data;
tv_title.setText(data.getTitle());
rl_layout.setBackgroundResource(data.getColor());
}
}
마지막으로 뷰페이저를 보여줄 화면의 자바 코드입니다.
MainActivity.java
public class MainActivity extends AppCompatActivity {
ViewPager2 viewPager2;
Button btnToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager2 = findViewById(R.id.viewPager2);
btnToggle = findViewById(R.id.btnToggle);
ArrayList<DataPage> list = new ArrayList<>();
list.add(new DataPage(android.R.color.black,"1 Page"));
list.add(new DataPage(android.R.color.holo_red_light, "2 Page"));
list.add(new DataPage(android.R.color.holo_green_dark, "3 Page"));
list.add(new DataPage(android.R.color.holo_orange_dark, "4 Page"));
list.add(new DataPage(android.R.color.holo_blue_light, "5 Page"));
list.add(new DataPage(android.R.color.holo_blue_bright, "6 Page"));
viewPager2.setAdapter(new ViewPagerAdapter(list));
btnToggle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (viewPager2.getOrientation() == ViewPager2.ORIENTATION_VERTICAL) {
btnToggle.setText("가로로 슬라이드");
viewPager2.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
}else {
btnToggle.setText("세로로 슬라이드");
viewPager2.setOrientation(ViewPager2.ORIENTATION_VERTICAL);
}
}
});
}
}
list에 담을 데이터를 넣어줍니다.
setAdapter() 메서드를 사용해서 뷰페이저에 어댑터를 연결해줍니다.
setOrientation() 메서드를 사용해서 뷰페이저에서 사용할 방향을 설정해 줍니다.
완성 화면
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] 서버 이미지 불러오기 (0) | 2022.03.04 |
---|---|
[Java][Android] 이미지 회전 (0) | 2022.03.02 |
[JAVA][Android] 캘린더 일정 추가 및 삭제 (0) | 2022.02.28 |
[JAVA][Android] 리사이클러뷰 (원리) (0) | 2022.02.26 |
[JAVA][Android] 막대 그래프 만들기 (0) | 2022.02.22 |