본문 바로가기
프로그래밍/안드로이드

안드로이드 뷰페이저(ViewPager)

by -현's- 2015. 4. 7.
반응형


●뷰페이저(ViewPager)

- 화면을 좌우로 드래그해서 화면을 전환하는 기법이다.


- import android.support.v4.app.~~ 를 선언해야한다.





●예제

- 버튼을 클릭하거나 좌우로 드래그하면 화면이 전환되고 2초마다 화면이 자동으로 전환되는 예제


MainActivity.java

package com.example.day0404;


import android.os.Bundle;

import android.os.Handler;

import android.support.v4.view.ViewPager;

import android.support.v7.app.ActionBarActivity;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;


public class MainActivity extends ActionBarActivity implements OnClickListener{

Button btn[] = new Button[3];

ViewPager viewPager = null;

Thread thread = null;

Handler handler = null;

int p=0; //페이지번호

int v=1; //화면 전환 뱡향

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//viewPager

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

MyViewPagerAdapter adapter = new MyViewPagerAdapter(getSupportFragmentManager());

viewPager.setAdapter(adapter);


btn[0] = (Button)findViewById(R.id.btn_a);

btn[1] = (Button)findViewById(R.id.btn_b);

btn[2] = (Button)findViewById(R.id.btn_c);


for(int i=0;i<btn.length; i++){

btn[i].setOnClickListener(this);

}

handler = new Handler(){


public void handleMessage(android.os.Message msg) {

if(p==0){

viewPager.setCurrentItem(1);

p++;

v=1;

}if(p==1&&v==0){

viewPager.setCurrentItem(1);

p--;

}if(p==1&&v==1){

viewPager.setCurrentItem(2);

p++;

}if(p==2){

viewPager.setCurrentItem(1);

p--;

v=0;

}

}

};

thread = new Thread(){

//run은 jvm이 쓰레드를 채택하면, 해당 쓰레드의 run메서드를 수행한다.

public void run() {

super.run();

while(true){

try {

Thread.sleep(2000);

handler.sendEmptyMessage(0);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

};

thread.start();

}


@Override

public void onClick(View v) {

switch(v.getId()){

case R.id.btn_a:

viewPager.setCurrentItem(0);

Toast.makeText(this,"A버튼", Toast.LENGTH_SHORT).show();

break;

case R.id.btn_b:

viewPager.setCurrentItem(1);

Toast.makeText(this,"B버튼", Toast.LENGTH_SHORT).show();

break;

case R.id.btn_c:

viewPager.setCurrentItem(2);

Toast.makeText(this,"C버튼", Toast.LENGTH_SHORT).show();

break;

default:

break;

}

}

}




- activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   

 xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/LinearLayout1"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    tools:context="${relativePackage}.${activityClass}" >

    

    <LinearLayout 

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal">

        <Button 

            android:id="@+id/btn_a"

            android:layout_width="0dp"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="A"

            style="@style/Widget.AppCompat.ActionButton"/>

        <Button 

            android:id="@+id/btn_b"

            android:layout_width="0dp"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="B"

            style="@style/Widget.AppCompat.ActionButton"/>

        <Button 

            android:id="@+id/btn_c"

            android:layout_width="0dp"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="C"

            style="@style/Widget.AppCompat.ActionButton"/>

                

    </LinearLayout>

    

    <android.support.v4.view.ViewPager

        android:id="@+id/viewPager"

        android:layout_width="match_parent"

        android:layout_height="match_parent"/>

    


</LinearLayout>




- MyViewPagerAdapter.java

package com.example.day0404;


import android.support.v4.app.Fragment;

import android.support.v4.app.FragmentManager;

import android.support.v4.app.FragmentStatePagerAdapter;


public class MyViewPagerAdapter extends FragmentStatePagerAdapter{

/*

* 이 클래스의 부모생성자 호출시 인수로 반드시 FragmentManager객체를 넘겨야한다.

* 이 객체는 Activity에서만 만들수 있고, 여기서사용중인 Fragment가 v4이기 때문에

* Activity중에서도 ActionBarActivity에서 얻어와야한다.

*/

Fragment[] fragments = new Fragment[3];

public MyViewPagerAdapter(FragmentManager fm) {

super(fm);

fragments[0] = new FragmentA();

fragments[1] = new FragmentB();

fragments[2] = new FragmentC();

}

//아래의 메서드들의 호출 주체는 ViewPager이다.

//ListView와 원리가 같다.

/*

* 여러 프레그먼트 중 어떤 프레그먼트를 보여줄지 결정

*/

public Fragment getItem(int arg0) {

return fragments[arg0];

}

/*

* 보여질 프레그먼트가 몇개인지 결정

*/

public int getCount() {

return fragments.length;

}

}




- FragmentA.java

package com.example.day0404;


import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;



public class FragmentA extends Fragment{

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

return inflater.inflate(R.layout.fragment_a, container, false);

}

}

 



- fragment_a.xml

<?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" 

    android:background="#3DB7CC">

</LinearLayout>

 



- FragmentB.java, fragment_b.xml, FragmentC.java, fragment_c.xml 동일
















반응형

댓글