티스토리 뷰



안드로이드/Andorid Viewpager 사용 하기

▒ ▒  ▒  ▒  ▒  ▒  ▒  ▒  ViewPager란??  ▒  ▒  ▒  ▒  ▒  ▒  ▒   

ViewPager란
수평으로 View를 좌/우 로 스크롤 할때 사용 할때 사용하는 클래스 입니다. 안드로이드 기본으로 지원하는 클래스는 아니지만 안드로이드 제공하는 'Compatibility Package Revison 3'  Support 라이브러리에 포함 되어 안드로이드 1.6 이후 버젼 이후에는 사용이 가능 합니다.

일반적으로 좌/우 로 화면을 전환할 경우 Gallery, HorizontalScrollView, ViewFlipper, ViewSwitcher등을 이용하여 개발을 많이 하는데요 전문적으로 화면전환을 위해 만들어진 Viewpager를 이용하면 좀 더 편리하고 기능적인 화면을 구성 할 수 있습니다.

아래는 Viewpager의 동작 방식 입니다.
(구글 마켓이나 구글+ 도 Viewpager방식으로 만들어 졌습니다.)  
 

 
                      Viewpager는 위의 그림 처럼 좌/우 로 이동 시켜 주면 화면이 전환 되면서 동작 합니다.  
 





▒ ▒  ▒  ▒  ▒  ▒  ▒  ViewPager 를 위한 설치 준비  ▒ ▒  ▒  ▒  ▒  ▒ ▒  

기본적으로 Viewpager를 사용하기 위해서는 Support Libary를 사용 해야 합니다. 안드로이드 SDK에서 기본으로 제공해주는 클래스가 아니기 때문에 "android-support-v4.jar"라는 Libary를 추가 해서 사용 해야 합니다.

"android-support-v4.jar" 를 사용하기 위해서는 Viewpager를 사용할 Project의 Properties에서 Java Build Path(Alt + Enter)를 선택 합니다. Java Build Path의 Libraries탭을 선택하고 외부에서 직접 Jar파일을 추가 할 수 있는 Add External JARs... 를 선택 합니다. 그러면 두번째 그림과 같이 JAR Selection 창이 나오는데 아래와 같이 추가해 주시면 됩니다. 

 
 Add External JARs... 를 선택후, 

 자신의 Android 설치 폴더의 extras -> android -> support -> v4 폴더에 가면  "android-support-v4.jar"  라이브러리를 추가 할 수 있습니다.


< 만약에 폴더가 없거나 라이브러리를 추가 할 수 없다면, 최신 버젼의 SDK와 ADT 를 설치 해 보시고 다시 추가해 보시기 바랍니다. >








▒ ▒  ▒  ▒  ▒  ▒  ▒  XML에 ViewPager 적용 하기  ▒ ▒  ▒  ▒  ▒  ▒ ▒ 

라이브러리를 재대로 추가 한 후에 XML에 ViewPager를 사용한 코드 입니다. Viewpager를 사용하기 위해서는<android.support.v4.view.ViewPager> 클래스를 풀네임을 모두 적어 주어야 하는데요. 그 이유는 아까 말씀 드렸듯이 안드로이드가 기본적으로 지원하는 클래스가 아니기 때문 입니다.

<android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_above="@+id/bottom"
            android:layout_below="@+id/ll_title_layout"
            >
</android.support.v4.view.ViewPager>





▒ ▒  ▒  ▒  ▒  ▒  ▒  Java 전체 코드 입니다. ▒ ▒  ▒  ▒  ▒  ▒ ▒
 

package arabiannight.tistory.com;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class TestViewPagerActivity extends Activity implements OnClickListener{
	private ViewPager mPager;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		setLayout();
		
		mPager = (ViewPager)findViewById(R.id.pager);
		mPager.setAdapter(new PagerAdapterClass(getApplicationContext()));
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_one:
			setCurrentInflateItem(0);
			break;
		case R.id.btn_two:
			setCurrentInflateItem(1);
			break;
		case R.id.btn_three:
			setCurrentInflateItem(2);
			break;
		}
	}
	
	private void setCurrentInflateItem(int type){
		if(type==0){
			mPager.setCurrentItem(0);
		}else if(type==1){
			mPager.setCurrentItem(1);
		}else{
			mPager.setCurrentItem(2);
		}
	}
	
	private Button btn_one;
	private Button btn_two;
	private Button btn_three;
	
	/**
	 * Layout
	 */
	private void setLayout(){
		btn_one = (Button) findViewById(R.id.btn_one);
		btn_two = (Button) findViewById(R.id.btn_two);
		btn_three = (Button) findViewById(R.id.btn_three);
		
		btn_one.setOnClickListener(this);
		btn_two.setOnClickListener(this);
		btn_three.setOnClickListener(this);
	}
	
	private View.OnClickListener mPagerListener = new View.OnClickListener() {
		@Override
		public void onClick(View v) {
			String text = ((Button)v).getText().toString();
			Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
		}
	};
	
	/**
	 * PagerAdapter 
	 */
	private class PagerAdapterClass extends PagerAdapter{
		
		private LayoutInflater mInflater;

		public PagerAdapterClass(Context c){
			super();
			mInflater = LayoutInflater.from(c);
		}
		
		@Override
		public int getCount() {
			return 3;
		}

		@Override
		public Object instantiateItem(View pager, int position) {
			View v = null;
    		if(position==0){
    			v = mInflater.inflate(R.layout.inflate_one, null);
    			v.findViewById(R.id.iv_one);
    			v.findViewById(R.id.btn_click).setOnClickListener(mPagerListener);
    		}
    		else if(position==1){
    			v = mInflater.inflate(R.layout.inflate_two, null);
    			v.findViewById(R.id.iv_two);
    			v.findViewById(R.id.btn_click_2).setOnClickListener(mPagerListener);
    		}else{
    			v = mInflater.inflate(R.layout.inflate_three, null);
    			v.findViewById(R.id.iv_three); 
    			v.findViewById(R.id.btn_click_3).setOnClickListener(mPagerListener);
    		}
    		
    		((ViewPager)pager).addView(v, 0);
    		
    		return v; 
		}

		@Override
		public void destroyItem(View pager, int position, Object view) {	
			((ViewPager)pager).removeView((View)view);
		}
		
		@Override
		public boolean isViewFromObject(View pager, Object obj) {
			return pager == obj; 
		}

		@Override public void restoreState(Parcelable arg0, ClassLoader arg1) {}
		@Override public Parcelable saveState() { return null; }
		@Override public void startUpdate(View arg0) {}
		@Override public void finishUpdate(View arg0) {}
	}
	
}




▒ ▒  ▒  ▒  ▒  ▒  ▒  코드 설명 입니다. ▒ ▒  ▒  ▒  ▒  ▒ ▒

ViewPager 표시하는 View는 PagerAdapter를 통해 공급 받습니다. PagerAdapter를 통해 화면에 표시 될 View의 라이프 사이클을 관리 할 수 있습니다. 일반적인 ListView와 ListAdapter의 관계와 동일하다고 이해 하시면 됩니다. 즉, Adapter를 통해 ViewPager에 표시되는 Data들을 관리한다는 내용 입니다.


VieaPager와 PagerAdapter를 연결 시켜 주는 부분 입니다. setAdapter를 통해 연결 합니다.
mPager = (ViewPager)findViewById(R.id.pager);
mPager.setAdapter(new PagerAdapterClass(getApplicationContext()));


PagerAdapter 상속 구현 클래스 부분 입니다. PagerAdapter에서 instantiateItem() 라는 오버라이드 메서드가 있는데 ViewPager의 getCount()에서 얻어온 Count의 Position별로 Pager에 등록할 item을 처리 할 수 있는 메서드 입니다. 즉,  VieaPager에서 사용할 뷰객체를 생성하는 작업 입니다.

단 주의 해야 할 점이 있는데, 
처음 실행시 PagerAdapter는 현재의 position의 Item의 양쪽 옆의 View들을 모두 instantiateItem()  해준다는 점인데요. 처음 시작시에는 position션이 첫번째인 item을 보여주기 때문에 아래와 같은 형태로 View를 그려 줍니다.


처음 저희가 사용할 View는 총 3개의 View입니다.(Position 첫번째, 두번째 , 세번째)




1. 첫번째 포지션으로 시작했을 경우 입니다. ( 첫번째 두번째 View가 모두 생성 됩니다. 이말은 즉 instantiateItem() 을 두번 탓다는 얘기 입니다.)



2. 두번째 포지션으로 이동했을 경우 입니다.  ( 세번째 포지션이 생성 됩니다. 그리고 첫번째 포지션도 유지하고 있습니다. ) 포지션이동은 좌/우 스크롤을 이용하거나 setCurrentInflateItem(int position) 메서드로 원하는 포지션으로 이동할 수 있습니다.



2. 세번째 포지션으로 이동했을 경우 입니다. ( 첫번째 포지션을 삭제 합니다. )



 
 이러한 형태로 PagerAdapter의 View관리가 이루어 집니다. 항상 양쪽의 View를 생성하거나 유지 시키고 나머지 포지션은 삭제 하는 형태 입니다.  
 






▒ ▒  ▒  ▒  ▒  ▒  ▒  ▒  PagerAdapter API 설명  ▒  ▒  ▒  ▒  ▒  ▒  ▒  
  
getCount() : 현재 PagerAdapter에서 관리할 갯수를 반환 한다. 

instantiateItem()
: ViewPager에서 사용할 뷰객체 생성 및 등록 한다.  
destroyItem() : View 객체를 삭제 한다.

isViewFromObject()
instantiateItem메소드에서 생성한 객체를 이용할 것인지 여부를 반환 한다. 

restoreState()
: saveState() 상태에서 저장했던 Adapter와 page를 복구 한다. 

saveState()
 : 현재 UI 상태를 저장하기 위해 Adapter와 Page 관련 인스턴스 상태를 저장 합니다. 

startUpdate() : 페이지 변경이 시작될때 호출 됩니다.


finishUpdate() : 페이지 변경이 완료되었을때 호출 됩니다. 







▒ ▒  ▒  ▒  ▒  ▒  ▒  ▒  첨부파일 ▒  ▒  ▒  ▒  ▒  ▒  ▒   








▒ ▒  ▒  ▒  ▒  ▒  ▒  ▒  참고 사이트  ▒  ▒  ▒  ▒  ▒  ▒  ▒ 
 

출처 : 
http://blog.daum.net/mailss/16
출처 http://blog.naver.com/PostView.nhn?blogId=huewu&logNo=110116958816 






음 이것으로 ViewPager의 포스팅을 마치겠습니다.!! 음! 위의 두사이트가 참 많이 도움이 되었습니다.! 

유용하게 사용하셨으면 좋겠네요.

문의 사항은 댓글로 남겨주세요.^^ ㅎㅎ




 

 



댓글
  • 이전 댓글 더보기
  • 프로필사진 송영배 위소스 그대로 ViewPager 안에 spinner를 추가할려고 하는데 추가 까지 되는데 스피너를 클릭하면 에러가나에요.
    확인좀 해주세요.
    2012.08.30 17:02
  • 프로필사진 아라비안왕자 말로만 들어서 어떤 부분이 문제가 되는 건지 잘 모르겠네요. 오류 Log를 남겨 주시면 원인을 알 수 있을 거 같네요. 2012.08.31 21:46 신고
  • 프로필사진 오리지날 뷰페이저 간 액티비티 이동은 불가능한가요? 2012.09.02 13:27
  • 프로필사진 아라비안왕자 안드로이드 flagment 를 참고해 보시기 바랍니다.^^ 2012.09.02 19:08 신고
  • 프로필사진 단호박게이 예제파일 감사드립니다.
    받아서 실행을 해보려니 에러가나서 v4빌드 추가하니 에러가 확줄더라구요
    근데 뭔 에러인가 봤더니 전부 온클릭리스너쪽 오버라이드 에서 에러가 나더라구요(@override)그래서 오버라이드 지우니 에러는 없어져서 실행은되지만
    익셉션 에러나면서 종료되버립니다. 어디가 문제일까여;;
    로그캣입니다.

    09-05 07:05:59.407: I/dalvikvm(221): Could not find method android.support.v4.view.ViewPager.setCurrentItem, referenced from method arabiannight.tistory.com.TestViewPagerActivity.setCurrentInflateItem
    09-05 07:05:59.407: W/dalvikvm(221): VFY: unable to resolve virtual method 8: Landroid/support/v4/view/ViewPager;.setCurrentItem (I)V
    09-05 07:05:59.407: D/dalvikvm(221): VFY: replacing opcode 0x6e at 0x0006
    09-05 07:05:59.424: D/dalvikvm(221): Making a copy of Larabiannight/tistory/com/TestViewPagerActivity;.setCurrentInflateItem code (68 bytes)
    09-05 07:05:59.424: I/dalvikvm(221): Could not find method android.support.v4.view.ViewPager.setCurrentItem, referenced from method arabiannight.tistory.com.TestViewPagerActivity.setCurrentInflateItem
    09-05 07:05:59.424: W/dalvikvm(221): VFY: unable to resolve virtual method 8: Landroid/support/v4/view/ViewPager;.setCurrentItem (I)V
    09-05 07:05:59.424: D/dalvikvm(221): VFY: replacing opcode 0x6e at 0x000e
    09-05 07:05:59.427: I/dalvikvm(221): Could not find method android.support.v4.view.ViewPager.setCurrentItem, referenced from method arabiannight.tistory.com.TestViewPagerActivity.setCurrentInflateItem
    09-05 07:05:59.427: W/dalvikvm(221): VFY: unable to resolve virtual method 8: Landroid/support/v4/view/ViewPager;.setCurrentItem (I)V
    09-05 07:05:59.427: D/dalvikvm(221): VFY: replacing opcode 0x6e at 0x0015
    09-05 07:05:59.427: E/dalvikvm(221): Could not find class 'android.support.v4.view.ViewPager', referenced from method arabiannight.tistory.com.TestViewPagerActivity.onCreate
    09-05 07:05:59.427: W/dalvikvm(221): VFY: unable to resolve check-cast 8 (Landroid/support/v4/view/ViewPager;) in Larabiannight/tistory/com/TestViewPagerActivity;
    09-05 07:05:59.427: D/dalvikvm(221): VFY: replacing opcode 0x1f at 0x0013
    09-05 07:05:59.427: D/dalvikvm(221): Making a copy of Larabiannight/tistory/com/TestViewPagerActivity;.onCreate code (92 bytes)
    09-05 07:05:59.517: D/AndroidRuntime(221): Shutting down VM
    09-05 07:05:59.517: W/dalvikvm(221): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
    09-05 07:05:59.517: E/AndroidRuntime(221): Uncaught handler: thread main exiting due to uncaught exception
    09-05 07:05:59.537: E/AndroidRuntime(221): java.lang.RuntimeException: Unable to start activity ComponentInfo{arabiannight.tistory.com/arabiannight.tistory.com.TestViewPagerActivity}: android.view.InflateException: Binary XML file line #34: Error inflating class android.support.v4.view.ViewPager
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.os.Handler.dispatchMessage(Handler.java:99)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.os.Looper.loop(Looper.java:123)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.app.ActivityThread.main(ActivityThread.java:4363)
    09-05 07:05:59.537: E/AndroidRuntime(221): at java.lang.reflect.Method.invokeNative(Native Method)
    09-05 07:05:59.537: E/AndroidRuntime(221): at java.lang.reflect.Method.invoke(Method.java:521)
    09-05 07:05:59.537: E/AndroidRuntime(221): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    09-05 07:05:59.537: E/AndroidRuntime(221): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    09-05 07:05:59.537: E/AndroidRuntime(221): at dalvik.system.NativeStart.main(Native Method)
    09-05 07:05:59.537: E/AndroidRuntime(221): Caused by: android.view.InflateException: Binary XML file line #34: Error inflating class android.support.v4.view.ViewPager
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
    09-05 07:05:59.537: E/AndroidRuntime(221): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.app.Activity.setContentView(Activity.java:1622)
    09-05 07:05:59.537: E/AndroidRuntime(221): at arabiannight.tistory.com.TestViewPagerActivity.onCreate(TestViewPagerActivity.java:21)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
    09-05 07:05:59.537: E/AndroidRuntime(221): ... 11 more
    09-05 07:05:59.537: E/AndroidRuntime(221): Caused by: java.lang.ClassNotFoundException: android.support.v4.view.ViewPager in loader dalvik.system.PathClassLoader@44dab988
    09-05 07:05:59.537: E/AndroidRuntime(221): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
    09-05 07:05:59.537: E/AndroidRuntime(221): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
    09-05 07:05:59.537: E/AndroidRuntime(221): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.view.LayoutInflater.createView(LayoutInflater.java:466)
    09-05 07:05:59.537: E/AndroidRuntime(221): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
    09-05 07:05:59.537: E/AndroidRuntime(221): ... 20 more
    09-05 07:05:59.567: I/dalvikvm(221): threadid=7: reacting to signal 3
    09-05 07:05:59.567: E/dalvikvm(221): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
    09-05 07:06:07.938: I/Process(221): Sending signal. PID: 221 SIG: 9
    2012.09.05 16:08
  • 프로필사진 아라비안왕자 Project -> Clean 해보시구요. 안되면 자바 컴파일러 버전 수정 해보시기 바랍니다. 2012.09.07 14:15 신고
  • 프로필사진 단호박게이 오오 잘되네요

    답변감사드립니다~
    2012.09.10 09:20
  • 프로필사진 아라비안왕자 ㅎㅎ 컴파일러 버전 문제 였나요? 2012.09.10 23:52 신고
  • 프로필사진 연금술사 설명 감사합니다...
    ViewPager로 달력의 이동을 구현중이었는데..많은 도움됐습니다..^^*...
    2012.09.06 18:18
  • 프로필사진 아라비안왕자 네^^ 댓글 감사 드립니다. 2012.09.07 14:16 신고
  • 프로필사진 헬로우 viewpager가 가로로 말고 세로로 paging되는 방법은 없을까요? 검색해봐도 예전에 다른 유저가 구버전모듈을 확장해서 만든 모듈 말고는 안보이던데... 혹시 방법이 있거나, 모듈이 있으면 좀 알려주세요 ^^;
    2012.09.20 23:56
  • 프로필사진 아라비안왕자 음.. 세로로 페이징 되는 부분은 저도 잘 모르겠네요^^ 아마 커스텀 하셔서 사용하셔야 할 것 같습니다. 2012.09.27 17:21 신고
  • 프로필사진 셀프입니다 안녕하세요 질문있어서 남깁니다 ㅜ

    페이지 이동이 생겼을때 호출되는 함수가 startUpdate, finishUpdate 이 두가지 인거같은데

    페이지 변경이 완료 됐을때 애니메이션을 넣고 싶은데... 변경이 완료되면 Log를 찍어보니까 finishUpdate 메서드가 총 4번 호출이

    되더군요...

    그리고 현재 페이지 포지션을 어떻게 얻어낼수있나요?
    2012.11.12 00:37
  • 프로필사진 아라비안왕자 예제에,

    public Object instantiateItem(View pager, int position)

    요 메서드를 참고해 보시기 바랍니다.^^
    2012.11.28 19:44 신고
  • 프로필사진 최현민 안녕하세요~ viewpager 검색하다가 우연히 들려서 예제 실행시켰는데
    아래와 같은 에러때문에 실행시키자마자 에러가 나네요..
    혹시 왜그런지 아시나요?ㅠㅠ

    https://www.dropbox.com/s/4bnztxgcfs8dvoh/log.txt
    2012.11.29 09:29
  • 프로필사진 아라비안왕자 android-support-v4 라이브러리가 재대로 추가 됬는지 확인해 보실래요? 2012.11.29 16:20 신고
  • 프로필사진 최현민 답변 감사합니다~ 2012.12.01 09:58
  • 프로필사진 아라비안왕자 네^^ 별말씀을ㅎㅎ 실행되시나요? 2012.12.01 22:30 신고
  • 프로필사진 궁금합니다 안녕하세요. 안드로이드 초보 개발자인데요. 질문이 있어서 남겨봅니다.
    위의 소스코드를 이용해서 제가 조금 수정하다보니 잘안되는 부분이 있는데요.
    예를 들어 서로 다른 레이아웃의 화면 3개를 뷰페이저로 했을때 각 화면마다 처리하는 이벤트가(예를 들어 버튼 등) 서로 다른 경우에는
    어떤 식으로 처리해야 하나요? 서로 다르게 해보니 보이는 화면(XML)만 바뀌는거 같고 이벤트 등은 실행이 안되네요 ㅜㅜ 이 부분이 어렵습니다.
    2013.02.12 15:42
  • 프로필사진 아라비안왕자 서로 다른 XML에서 이벤트 처리가 안될리가 없을텐데요. 위에서도 각각 화면마다 이벤트 걸어주는 예제를 사용했습니다. 다시 한번 잘 해보시고 막히는 부분 다시 질문해 주세요.^^ 2013.02.13 02:18 신고
  • 프로필사진 이성하 제가 지금 잡지 어플을 만들고 잇는데 잡지 내용을 뷰페이퍼에 담고싶습니다..
    그런데 ... 기사내용이 수십 수백개인데 ..그걸 모두 액티비티 추가 하기가 부담에 되서요 .. 어떻게 해결방법이있을까요???
    굳이 뷰페이퍼가 아니여도 괜찮고 뷰페이퍼라면 정말 좋겠습니다...

    잘 작동하구요 잘사용하면 진짜 좋을거 같습니다 감사합니다.
    2013.02.25 23:12
  • 프로필사진 아라비안왕자 실제 사용하는 페이지가 비슷한 형식이면 커버만 다른 Activity로 만드시고 내용물을 보는 Activity는 하나로 통일해도 될 거 같은데요. flag 변수를 두셔서 관리하세요. 2013.02.26 01:34 신고
  • 프로필사진 이성하 일단 이해가 안가서 ㅠㅠ 뷰플리퍼로 구현을했는데 ...
    초보 개발자라서 무슨 말인지 잘모르겠는데요
    다시 한번 만 쉽게 풀어서 말씀좀 해주세요 ㅠㅠ

    지금도 어플 만드는데 비슷한 형식의 페이지때문에 고민중인데 ...
    이해한다면 정말 좋은거 배워갈거 같습니다
    2013.03.08 23:58
  • 프로필사진 아라비안왕자 그러니깐 재가 말하는 요점은 Activity를 한개만 만드시구요. 어짜피 비슷한 형식의 포맷이라면 사용했던 xml에(ImageView)에 이미지만 교체하시고 Text(TextView)에 String만 교체하는 형식으로 만드시는게 좋을 것 같다는 얘기 입니다.

    Flag를 두어서 전체페이지를 먼저 int = total_page; 로 얻어 오시면 일단 전체 페이지가 나올테니 이렇게 전체 페이지 구해오시구요.

    현재 페이지 (+1, -1)로 앞뒤 3페이지씩 보여주는 형식으로 구현하시면 될 거 같습니다. 재 생각으로는 액티비티 3개로 구현하면 될 듯 한데.. 궁금하신 부분 있으시면 답변 주세요.^^


    2013.03.14 01:06 신고
  • 프로필사진 leeyj Viewpager 관련하여 찾아본 에제중에 제일 깔끔하게 설명 된 것 같습니다.
    덕분에 큰 도움이 되었습니다.
    감사합니다 ^^

    android-support-v4.jar 를 추가할 때 설명된 방법으로 했을 때에도 error이 발생하는 경우에는
    임으로 프로젝트에 libs 폴더를 만들고 그 안에 android-support-v4.jar를 복사하면 문제가 수정됩니다.

    혹시 모르고 고생할지도 모르는 분들을 위해서 이 부분도 추가해주시면 좋을 것 같습니다.
    즐거운 하루 되세요~~
    2013.03.05 16:10
  • 프로필사진 아라비안왕자 오웃 팁까지 알려주시다니 감사합니다. ^^ 2013.03.14 00:51 신고
  • 프로필사진 drollro Viewpager의 두번째 페이지 부터 실행할 방법은 없나요?

    흰색배경 보이게 말이예요~ ^^
    2013.03.25 20:37
  • 프로필사진 아라비안왕자 실행시 setCurrentInflateItem(1); 이부분을 이용해 주시면 될 듯하네요. 2013.04.08 23:08 신고
  • 프로필사진 neogem 저 역시 같은 질문입니다. 처음에 두번째 페이지를 실행하고 싶은데... 어떻게 하면 되나요? 2013.03.26 14:06
  • 프로필사진 아라비안왕자 실행시 setCurrentInflateItem(1); 이부분을 이용해 주시면 될 듯하네요. 2013.04.08 23:08 신고
  • 프로필사진 pointless 베리 빅 큰 도움이 되었습니다~ 감사합니다 ^^ 2013.04.18 16:06 신고
  • 프로필사진 nagne 감사합니다. 큰도움이 되었습니다. 2013.07.01 11:21
  • 프로필사진 월향 좌 우 스크롤을 구현하려고 찾던 중에 들렀습니다.
    우선 감사합니다 ^^
    이런 좋은 자료를 공유해주셔서요.
    감사히 잘쓰겠습니다
    수고하세요 ^^
    2013.07.16 15:22
  • 프로필사진 이럴수가 좋은 글 감사합니다. 예제 실행 해보려다 문제가 생겼었는데, leeyj 님 덧글 처럼 하니 잘 작동하네요. 2013.08.07 04:41
  • 프로필사진 안드로이드초보자 질문드립니다 ㅠ View를 양쪽만 기억하고 잇다고 하셧는데.. 만약에 view가 4개, 5개일 경우 페이지를 넘기게 되면 앞에서 작업한 내용이 지워지게 됩니다. ㅠㅠ
    혹시 이 부분을 안지워지게 할 수 있나요?? 알려주시면 감사하겠습니다 ㅠ
    2014.01.14 11:08
  • 프로필사진 지나가는사람이 아직은 제작보단 공부를 더 하셔야될듯 싶은데요...?
    책 한권이라도 사서 읽으세요
    기초도 안 되신분이 아직 만지기에는 무리일듯 싶네요

    2014.02.09 16:27
  • 프로필사진 mato 매번 좋은 글 보고 갑니다 ㅋㅋ 그런데 중간 부분에 오타가 있네요 vieapager가 뭐죠 ㅋㅋㅋ 2014.04.27 07:48
  • 프로필사진 천류 정리가 잘되어 있어 많은 도움이 되네요.
    근데 instantiateItem메서드의 포지션은 기본적으로 0부터 시작하지 않네요?
    로그캣으로 보니 두번실행되어
    Log:0
    Log:1
    이렇게 1부터 시작하네요..
    그래서 mPager.setCurrentItem(0);
    이 코드를 넣어줬는데도 1부터 시작하네요.;;
    -----------------------------
    더 찾아보니 OnPageChangeListener 라는 리스너가
    있습니다. 이걸로 처리하면 해결되네요.ㅋㅋ
    2014.11.11 11:38
  • 프로필사진 예쁜꽃이피었으면 좋은 글 감사합니다.
    이 글을 왜 이제 봤나 모르겠어요~
    담아갈게요~
    2015.02.02 16:59 신고
댓글쓰기 폼