반응형

이 게시물은 다음 링크를 참조하여 학습했습니다.

 

안드로이드 뷰페이저 기본 사용법. (Android ViewPager)

1. 화면에 표시될 컨텐츠를 전환하는 방법. 안드로이드를 탑재한 스마트폰이 처음 만들어지던 시기에는, 앱 화면을 구성할 때 UI(User Interface)의 "직관성"이 가장 중요한 이슈 중 하나였습니다. 사

recipes4dev.tistory.com

ViewPager.....

어렵다.....

처음에는 이미지뷰와 텍스트뷰를 포함하고 있는 Custom ViewPager를 만들려고 했지만,

2시간째 내가 만든 코드가 돌아가지 않는다.

이론적으로는 틀린부분이 없는 것 같은데, 아직까지는 문제점을 찾지 못했다.

막혔을 때 물어볼 곳이 없는 것도 독학의 큰 단점 중 하나라는 것을 느낀다..

ViewPager에 대해서 자세하게 설명되어 있는 블로그를 통해 간단한 ViewPager를 구현해보았다.

CustomViewPager를 구현하는 방법을 더 공부하고 추후에 업로드 해야겠다.

activity_main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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">
 
    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 
</androidx.constraintlayout.widget.ConstraintLayout>
cs

 

page.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:textSize="48dp"
        android:id="@+id/title"/>
 
</androidx.constraintlayout.widget.ConstraintLayout>
cs

TextViewPagerAdapter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package com.example.viewpagerexample;
 
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
 
public class TextViewPagerAdapter extends PagerAdapter {
    // LayoutInflater 서비스 사용을 위한 Context 참조 저장
    private Context mContext = null;
 
    public TextViewPagerAdapter(){
 
    }
    // Context를 전달받아 mContext에 저장하는 생성자
    public TextViewPagerAdapter(Context context){
        mContext = context;
    }
 
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        View view = null;
 
        if(mContext != null){
            //LayoutInflater를 통해 "res/layout/page.xml"을 뷰로 생성
            LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.page,container,false);
 
            TextView textView = (TextView)view.findViewById(R.id.title);
            textView.setText("TEXT"+position);
        }
        //뷰페이저에 추가
        container.addView(view);
 
        return view;
    }
 
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        //뷰페이저에서 삭제
        container.removeView((View)object);
    }
 
    @Override
    public int getCount() {
        //전체 페이지 수 지정
        return 10;
    }
 
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return (view == (View)object);
    }
}
 
cs

MainActivity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.example.viewpagerexample;
 
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
 
import android.os.Bundle;
 
public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private TextViewPagerAdapter pagerAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        viewPager = (ViewPager)findViewById(R.id.viewPager);
        pagerAdapter = new TextViewPagerAdapter(this);
        viewPager.setAdapter(pagerAdapter);
    }
}
cs

 

1. PagerAdapter

 ViewPager도 RecyclerView와 마찬가지로 어댑터를 사용자가 직접 구현해야 한다.

 ViewPager의 어댑터는 PagerAdapter를 상속받는데 다음 속성들을 오버라이딩 해주어야 한다.

메서드 설명
Object instantiateItem(ViewGroup container, int position) position에 해당하는 페이지 생성.
void destroyItem(Viewgroup container, int position, Object object) position에 해당하는 페이지 제거.
int getCount() 사용 가능한 뷰의 갯수를 리턴.
boolean isViewFromObject 페이지뷰가 특정 키 객체(key object)와 연관되는지 여부

 

ViewPager 초기화면
ViewPager 왼쪽으로 넘긴 화면

반응형

+ Recent posts