안드로이드

 

 

class MainActivity

 

package kr.co.dothome.braverokmc.imageslider1;

import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    ViewPager pager;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        pager= (ViewPager)findViewById(R.id.pager);

        //ViewPager에 설정할 Adapter 객체 생성

        //ListView에서 사용하는 Adapter와 같은 역할.

        //다만. ViewPager로 스크롤 될 수 있도록 되어 있다는 것이 다름

        //PagerAdapter를 상속받은 CustomAdapter 객체 생성

        //CustomAdapter에게 LayoutInflater 객체 전달

        CustomAdapter adapter= new CustomAdapter(getLayoutInflater());


        //ViewPager에 Adapter 설정

        pager.setAdapter(adapter);



    }



    //onClick속성이 지정된 View를 클릭했을때 자동으로 호출되는 메소드

    public void mOnClick(View v){
        int position;

        switch( v.getId() ){
            case R.id.btn_previous://이전버튼 클릭

                position=pager.getCurrentItem();//현재 보여지는 아이템의 위치를 리턴

                //현재 위치(position)에서 -1 을 해서 이전 position으로 변경

                //이전 Item으로 현재의 아이템 변경 설정(가장 처음이면 더이상 이동하지 않음)

                //첫번째 파라미터: 설정할 현재 위치

                //두번째 파라미터: 변경할 때 부드럽게 이동하는가? false면 팍팍 바뀜

                pager.setCurrentItem(position-1,true);

                break;

            case R.id.btn_next://다음버튼 클릭

                position=pager.getCurrentItem();//현재 보여지는 아이템의 위치를 리턴

                //현재 위치(position)에서 +1 을 해서 다음 position으로 변경

                //다음 Item으로 현재의 아이템 변경 설정(가장 마지막이면 더이상 이동하지 않음)

                //첫번째 파라미터: 설정할 현재 위치

                //두번째 파라미터: 변경할 때 부드럽게 이동하는가? false면 팍팍 바뀜

                pager.setCurrentItem(position+1,true);

                break;

        }


    }



}

 

 

class CustomAdapter

package kr.co.dothome.braverokmc.imageslider1;

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

/**
 * Created by choi on 2017-04-26.
 */

public class CustomAdapter extends PagerAdapter {


    LayoutInflater inflater;

    public CustomAdapter(LayoutInflater inflater) {
        //전달 받은 LayoutInflater를 멤버변수로 전달
        this.inflater=inflater;
    }


    //PagerAdapter가 가지고 잇는 View의 개수를 리턴
    //보통 보여줘야하는 이미지 배열 데이터의 길이를 리턴
    @Override
    public int getCount() {

        return 10; //이미지 개수 리턴(그림이 10개라서 10을 리턴)

    }

    //ViewPager가 현재 보여질 Item(View객체)를 생성할 필요가 있는 때 자동으로 호출
    //쉽게 말해, 스크롤을 통해 현재 보여져야 하는 View를 만들어냄.
    //첫번째 파라미터 : ViewPager
    //두번째 파라미터 : ViewPager가 보여줄 View의 위치(가장 처음부터 0,1,2,3...)
    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        View view=null;

        //새로운 View 객체를 Layoutinflater를 이용해서 생성

        //만들어질 View의 설계는 res폴더>>layout폴더>>viewpater_childview.xml 레이아웃 파일 사용
        view= inflater.inflate(R.layout.viewpager_childview, null);


        //만들어진 View안에 있는 ImageView 객체 참조
        //위에서 inflated 되어 만들어진 view로부터 findViewById()를 해야 하는 것에 주의.
        ImageView img= (ImageView)view.findViewById(R.id.img_viewpager_childimage);


        //ImageView에 현재 position 번째에 해당하는 이미지를 보여주기 위한 작업
        //현재 position에 해당하는 이미지를 setting
        img.setImageResource(R.drawable.gametitle_01+position);

        //ViewPager에 만들어 낸 View 추가
        container.addView(view);
        //Image가 세팅된 View를 리턴

        return view;
    }



    //화면에 보이지 않은 View는파쾨를 해서 메모리를 관리함.
    //첫번째 파라미터 : ViewPager
    //두번째 파라미터 : 파괴될 View의 인덱스(가장 처음부터 0,1,2,3...)
    //세번째 파라미터 : 파괴될 객체(더 이상 보이지 않은 View 객체)

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {

        //ViewPager에서 보이지 않는 View는 제거

        //세번째 파라미터가 View 객체 이지만 데이터 타입이 Object여서 형변환 실시

        container.removeView((View)object);

    }



    //instantiateItem() 메소드에서 리턴된 Ojbect가 View가  맞는지 확인하는 메소드
    @Override
    public boolean isViewFromObject(View v, Object obj) {

        return v==obj;

    }



}



 

 

 

R.layout.activity_main

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="3dp">



        <Button android:id="@+id/btn_previous"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="PREVIOUS"
            android:textSize="12sp"
            android:onClick="mOnClick"/>



        <Button android:id="@+id/btn_next"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Next"
            android:textSize="12sp"
            android:onClick="mOnClick"/>

    </LinearLayout>



    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v4.view.ViewPager>





</LinearLayout>


 

R.layout.viewpager_childview

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/img_viewpager_childimage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>


</LinearLayout>


 

 

이미지 파일 링크

 

[안드로이드 Android] ViewPager (뷰 페이저)

출처: http://kitesoft.tistory.com/76 [안드로이드 어플 개발]

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

사람이란 자연, 영혼, 사랑 그리고 신을 이성인으로서가 아니라 마음으로 인식한다. -도스토예프스키

댓글 ( 0)

댓글 남기기

작성