예 를 들 어 Android 에서 ViewPager 구성 요소 의 진급 사용 방법 을 설명 합 니 다.
사실 슬라이더 표 지 를 실현 하 는 것 도 현재 페이지 가 간단 합 니 다.대략 두 단계 가 필요 합 니 다.
첫 번 째 단 계 는 레이아웃 파일 ViewPager 위 에 ImageView 구성 요 소 를 설치 합 니 다.구성 요 소 는 그림 이나 shape 자원 일 수 있 습 니 다.ImageView 의 scale Type 속성 을 matrix 로 설정 해 야 합 니 다.즉,이 구성 요소 의 위치 와 크기 는 하나의 변환 행렬 로 제어 합 니 다.
두 번 째 단 계 는 Activity 에서 ViewPager 구성 요소 에 OnPage Change Listener 모니터 를 추가 합 니 다.OnPageChangeListener 에 matrix 를 설정 하여 슬라이더 ImageView 의 위 치 를 제어 합 니 다.이 감청 기 는 세 가지 방법 을 실현 해 야 한다.
onPageScrollStateChanged:미끄럼 상태의 변 화 를 감청 하 는 데 사용 합 니 다.
onPageScrolled:미 끄 러 지 는 동작 을 감청 하 는 데 사용 합 니 다.
onPageSeleted:현재 페이지 로 선 택 된 페이지 를 감청 하기 위 한 전환 입 니 다.
일반적으로 onPageSelected 방법 을 실현 하면 되 고,다른 두 가지 방법 은 비 워 둘 수 있다.또한 페이지 를 전환 할 때 슬라이더 도 부 드 럽 게 미 끄 러 지기 위해 슬라이더 의 ImageView 에 TranslateAnimation 애니메이션 을 지정 할 수 있 습 니 다.애니메이션 용 setAnimation 을 지정 하면 TranlateAnimation 도 간단 합 니 다.구조 함 수 는 TranslateAnimation(int beginX,int endX,int beginY,int endY)입 니 다.운동 벡터 의 시작 위치 와 종료 위 치 를 전달 하면 됩 니 다.
다음은 다섯 가지 구체 적 인 예 를 살 펴 보 자.
ViewPager 구현(데이터 원본 은 List
1.main.xml 파일 에 ViewPager 를 추가 합 니 다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</android.support.v4.view.ViewPager>
</LinearLayout>
2.뷰 3 개 만 들 기:
<?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" >
<TextView
android:id="@+id/txt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="25dp"
android:text=" " >
</TextView>
</LinearLayout>
<?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" >
<TextView
android:id="@+id/txt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" " >
</TextView>
</LinearLayout>
<?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" >
<TextView
android:id="@+id/txt3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" " >
</TextView>
</LinearLayout>
3.ViewPager 어댑터 클래스 만 들 기:
package com.yayun.viewpagerdemo;
import java.util.ArrayList;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
public class ViewPagerAdapter extends PagerAdapter {
private List<View> lViews=new ArrayList<View>();
public ViewPagerAdapter(List<View> lViews){
this.lViews=lViews;
}
@Override
public int getCount() {
return lViews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(lViews.get(position));
return lViews.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(lViews.get(position));
}
}
4.MainActivity.java:
package com.yayun.viewpagerdemo;
import java.util.ArrayList;
import java.util.List;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
private ViewPager viewPager;
private List<View> listViews=null;
ViewPagerAdapter pagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
viewPager=(ViewPager) findViewById(R.id.pager);
listViews=new ArrayList<View>();
/**
* Adapter
*/
View view1=View.inflate(this, R.layout.view1, null);
View view2=View.inflate(this, R.layout.view2, null);
View view3=View.inflate(this, R.layout.view3, null);
listViews.add(view1);
listViews.add(view2);
listViews.add(view3);
pagerAdapter=new ViewPagerAdapter(listViews) ;
viewPager.setAdapter(pagerAdapter);
}
}
5.실행 실례:
페이지 넘 기기 효과 가 있 습 니 다.
제목 추가
1.main.xml 파일 을 변경 해 야 합 니 다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >
<android.support.v4.view.PagerTabStrip
android:id="@+id/strip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top" >
</android.support.v4.view.PagerTabStrip>
</android.support.v4.view.ViewPager>
</LinearLayout>
2.어댑터 파일 을 변경 해 야 합 니 다.
package com.yayun.viewpagerdemo;
import java.util.ArrayList;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
public class ViewPagerAdapter extends PagerAdapter {
private List<View> lViews=new ArrayList<View>();
private List<String> titleList=new ArrayList<String>();
public ViewPagerAdapter(List<View> lViews,List<String> titleList){
this.lViews=lViews;
this.titleList=titleList;
}
@Override
public int getCount() {
return lViews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(lViews.get(position));
return lViews.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(lViews.get(position));
}
/**
*
*/
@Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titleList.get(position);
}
}
3.MainActivity.java 파일 을 변경 해 야 합 니 다.
package com.yayun.viewpagerdemo;
import java.util.ArrayList;
import java.util.List;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
private ViewPager viewPager;
private List<View> listViews=null;
ViewPagerAdapter pagerAdapter;
PagerTabStrip pagerTabStrip;
private List<String> titleList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
viewPager=(ViewPager) findViewById(R.id.pager);
pagerTabStrip=(PagerTabStrip) findViewById(R.id.strip);
listViews=new ArrayList<View>();
titleList=new ArrayList<String>();
titleList.add(" ");
titleList.add(" ");
titleList.add(" ");
/**
* Adapter
*/
View view1=View.inflate(this, R.layout.view1, null);
View view2=View.inflate(this, R.layout.view2, null);
View view3=View.inflate(this, R.layout.view3, null);
listViews.add(view1);
listViews.add(view2);
listViews.add(view3);
pagerAdapter=new ViewPagerAdapter(listViews,titleList) ;
viewPager.setAdapter(pagerAdapter);
}
}
4.실행 실례 는 다음 과 같다.
3.ViewPager 구현(데이터 원본 은 List
1.우선 세 개의 Fragment 를 만들어 야 합 니 다.
package com.yayun.viewpagerdemo;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.view1, container, false);
}
}
package com.yayun.viewpagerdemo;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment2 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.view2, container, false);
}
}
package com.yayun.viewpagerdemo;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment3 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.view3, container, false);
}
}
2.어댑터 설정:
package com.yayun.viewpagerdemo;
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
List<Fragment> fragmentsList;
List<String> titleList;
public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragmentsList,List<String> titleList) {
super(fm);
this.fragmentsList=fragmentsList;
this.titleList=titleList;
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return fragmentsList.get(arg0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return fragmentsList.size();
}
@Override
/**
*
*/
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titleList.get(position);
}
}
3.MainActivity.java:
package com.yayun.viewpagerdemo;
import java.util.ArrayList;
import java.util.List;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.PageTransformer;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.Window;
public class MainActivity extends ActionBarActivity {
private ViewPager viewPager;
private List<View> listViews=null;
ViewPagerAdapter pagerAdapter;
PagerTabStrip pagerTabStrip;
private List<String> titleList;
private List<Fragment> fragmentsList;
MyFragmentPagerAdapter myFragmentPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
viewPager=(ViewPager) findViewById(R.id.pager);
pagerTabStrip=(PagerTabStrip) findViewById(R.id.strip);
/**
* PagerTabStrip
*/
pagerTabStrip.setBackgroundColor(Color.GREEN);
pagerTabStrip.setDrawFullUnderline(false);
pagerTabStrip.setTextColor(Color.WHITE);
listViews=new ArrayList<View>();
titleList=new ArrayList<String>();
fragmentsList=new ArrayList<Fragment>();
fragmentsList.add(new Fragment1());
fragmentsList.add(new Fragment2());
fragmentsList.add(new Fragment3());
titleList.add(" ");
titleList.add(" ");
titleList.add(" ");
/**
* Adapter
*/
View view1=View.inflate(this, R.layout.view1, null);
View view2=View.inflate(this, R.layout.view2, null);
View view3=View.inflate(this, R.layout.view3, null);
listViews.add(view1);
listViews.add(view2);
listViews.add(view3);
pagerAdapter=new ViewPagerAdapter(listViews,titleList) ;
myFragmentPagerAdapter=new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentsList, titleList);
//viewPager.setAdapter(pagerAdapter);
viewPager.setAdapter(myFragmentPagerAdapter);
}
}
4.실행 실례:
이 방법 은 현재 페이지 에 없 는 페이지 를 소각 하지 않 고 페이지 카드 의 생 성과 소 거 를 실현 할 수 없습니다.
4.ViewPager(데이터 원본 은 List
어댑터 변경:
package com.yayun.viewpagerdemo;
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.View;
public class MyFragmentPagerAdapter2 extends FragmentStatePagerAdapter {
List<Fragment> fragmentsList;
List<String> titleList;
public MyFragmentPagerAdapter2(FragmentManager fm,List<Fragment> fragmentsList,List<String> titleList) {
super(fm);
this.fragmentsList=fragmentsList;
this.titleList=titleList;
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return fragmentsList.get(arg0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return fragmentsList.size();
}
@Override
/**
*
*/
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return titleList.get(position);
}
@Override
public Object instantiateItem(View container, int position) {
// TODO Auto-generated method stub
return super.instantiateItem(container, position);
}
@Override
public void destroyItem(View container, int position, Object object) {
// TODO Auto-generated method stub
super.destroyItem(container, position, object);
}
}
MainActivity.java 의 Adapter 를 바 꾸 면 페이지 카드 의 생 성과 삭 제 를 실현 할 수 있 습 니 다.다섯. onPagerChangeListener 감청 사용
MainActivity.java 만 수정 하면 됩 니 다.
package com.yayun.viewpagerdemo;
import java.util.ArrayList;
import java.util.List;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v4.view.ViewPager.PageTransformer;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.Window;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity implements OnPageChangeListener {
private ViewPager viewPager;
private List<View> listViews=null;
ViewPagerAdapter pagerAdapter;
PagerTabStrip pagerTabStrip;
private List<String> titleList;
private List<Fragment> fragmentsList;
MyFragmentPagerAdapter myFragmentPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
viewPager=(ViewPager) findViewById(R.id.pager);
pagerTabStrip=(PagerTabStrip) findViewById(R.id.strip);
/**
* PagerTabStrip
*/
pagerTabStrip.setBackgroundColor(Color.GREEN);
pagerTabStrip.setDrawFullUnderline(false);
pagerTabStrip.setTextColor(Color.WHITE);
listViews=new ArrayList<View>();
titleList=new ArrayList<String>();
fragmentsList=new ArrayList<Fragment>();
fragmentsList.add(new Fragment1());
fragmentsList.add(new Fragment2());
fragmentsList.add(new Fragment3());
titleList.add(" ");
titleList.add(" ");
titleList.add(" ");
/**
* Adapter
*/
View view1=View.inflate(this, R.layout.view1, null);
View view2=View.inflate(this, R.layout.view2, null);
View view3=View.inflate(this, R.layout.view3, null);
listViews.add(view1);
listViews.add(view2);
listViews.add(view3);
pagerAdapter=new ViewPagerAdapter(listViews,titleList) ;
myFragmentPagerAdapter=new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentsList, titleList);
//viewPager.setAdapter(pagerAdapter);
viewPager.setAdapter(myFragmentPagerAdapter);
viewPager.setOnPageChangeListener(this);//
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int arg0) {
Toast.makeText(this, " "+(arg0+1), Toast.LENGTH_SHORT).show();
}
}
인 스 턴 스 를 실행 하면 현재 페이지 탭 을 표시 할 수 있 습 니 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android ViewPager로 무한 스크롤 가능조금 조사해 보았더니, 라고 하는 기사가 돈피샤였습니다. 영어 기사라고 하는 것과, 데이터의 갱신에 대해서는 접하고 있지 않다(조금 유스 케이스가 다르다), 라고 하는 것으로 여기에 정리해 보겠습니다. ViewPag...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.