본문 바로가기
안드로이드+자바

안드로이드 viewpager 사용법

by 문자메일 2017. 1. 21.

ViewPager 컨테이너 설정된 xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:ads="http://schemas.android.com/apk/res-auto">

<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="80">

</android.support.v4.view.ViewPager>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="15">
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="50"
android:background="#FDF5E6"
android:id="@+id/previous_button"
android:text="Previous"
android:textSize="20dp"
android:layout_margin="3dp" />
<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="50"
android:background="#E0FFFF"
android:id="@+id/next_button"
android:text="Next"
android:textSize="20dp"
android:layout_margin="3dp" />
</LinearLayout>
<com.google.android.gms.ads.AdView

android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id">
</com.google.android.gms.ads.AdView>

</LinearLayout>

ViewPager 안에 들어갈 모양 xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img_viewpager_childimage"
android:layout_width="match_parent"
android:layout_height="match_parent"/>


</LinearLayout>



ViewPager로 보여줄 Activity


package com.zerobin.www.koreannamegenerator;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.Button;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

/**
* Created by Byun YB on 2017-01-20.
*/

public class StatisticActivity extends Activity implements View.OnClickListener{

Button next_btn, previous_btn;
ViewPager pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.statistic_activity);

//애드몹 코드
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);

next_btn = (Button) findViewById(R.id.next_button);
previous_btn = (Button) findViewById(R.id.previous_button);
pager = (ViewPager) findViewById(R.id.viewpager);
//ViewPager에 설정할 Adapter 객체 생성
//ListView에서 사용하는 Adapter과 같은 역할을 한다.
//레이아웃 인플레이터를 전달한다
CustomPagerAdapter adapter = new CustomPagerAdapter(getLayoutInflater());

//ViewPager에 어뎁터를 설정한다.
pager.setAdapter(adapter);

next_btn.setOnClickListener(this);
previous_btn.setOnClickListener(this);
}

//onClick속성이 지정된 View를 클릭했을때 자동으로 호출되는 메소드
@Override
public void onClick(View v) {
int position;
switch (v.getId()) {
case R.id.previous_button://이전버튼 클릭
position = pager.getCurrentItem();//현재 보여지는 아이템의 위치를 리턴
//현재 위치(position)에서 -1 을 해서 이전 position으로 변경
//이전 Item으로 현재의 아이템 변경 설정(가장 처음이면 더이상 이동하지 않음)
//첫번째 파라미터: 설정할 현재 위치
//두번째 파라미터: 변경할 때 부드럽게 이동하는가? false면 팍팍 바뀜
pager.setCurrentItem(position - 1, true);
break;
case R.id.next_button://다음버튼 클릭
position = pager.getCurrentItem();//현재 보여지는 아이템의 위치를 리턴
//현재 위치(position)에서 +1 을 해서 다음 position으로 변경
//다음 Item으로 현재의 아이템 변경 설정(가장 마지막이면 더이상 이동하지 않음)
//첫번째 파라미터: 설정할 현재 위치
//두번째 파라미터: 변경할 때 부드럽게 이동하는가? false면 팍팍 바뀜
pager.setCurrentItem(position + 1, true);
break;
}
}
}




ViewPager를 사용하기 위한 PagerAdapter

package com.zerobin.www.koreannamegenerator;

import android.support.v4.view.PagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

/**
* Created by Byun YB on 2017-01-20.
*/

public class CustomPagerAdapter extends PagerAdapter{

LayoutInflater inflater;
int[] images = {R.drawable.a2015girl_text, R.drawable.a2015man_text, R.drawable.a2016girl_text, R.drawable.a2016man_text};

//생성자, LayoutInflater를 받아온다.
CustomPagerAdapter(LayoutInflater inflater){
this.inflater = inflater;
}

//PagerAdapter가 가지고 있는 View의 개수를 리턴
//보여줘야하는 이미지 배열의 길이를 리턴한다.
@Override
public int getCount() {
return images.length; //그림의 갯수가 4
}

//ViewPager가 보여질 item을 생성할 필요가 있을 때 자동으로 호출한다. (즉 보여줄 View를 리턴한다.)

public Object instantiateItem(ViewGroup container, int position) {//postion view의 위치(0,1,2,...)
View view = null;

//레이아웃 인플레이터로 View 객체 생성(메모리에 올림)
//Child View 객체화
view = inflater.inflate(R.layout.viewpager_childview, null);

//ChildView안의 이미지뷰 가져오기
ImageView imageView = (ImageView) view.findViewById(R.id.img_viewpager_childimage);

//이미지뷰에 현재 포지션에 해당하는 이미지를 보여주기 위한 작업
//현재 포지션에 해당하는 이미지를 세팅
imageView.setImageResource(images[position]);

//뷰페이저에 만들어낸 뷰 추가
container.addView(view);

//이미지가 세팅된 VIew를 리턴
return view;
}


//화면에 보이지 않는 View는 파괴를 해서 메모리를 관리한다.
//첫번째 파라미터 : ViewPager
//두번째 파라미터 : 파괴될 View의 인덱스
//세번째 파라미터 : 파괴될 객체(더 이상 보이지 않은 View 객체)
@Override
public void destroyItem(ViewGroup container, int position, Object object) {

//ViewPager에서 보이지 않는 View는 제거한다.
container.removeView((View) object);//Object형이므로 view로 형변환한다.
}

//instantiateitem()메소드에서 리턴된 object가 view가 맞는지 확인하는 메소드
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}


댓글