Androidä¸çViewPageråå®ç°äºå·¦å³æ»å¨çææï¼ViewPagerç±»æä¾äºå¤çé¢åæ¢çæ°ææãå©ç¨ViewPagerå®ç°å¾ç循ç¯æ»å¨ä»£ç å¦ä¸ï¼
1ãé¦å
æ¯å¸å±æ件ï¼ä½¿ç¨äºä¸ä¸ªViewPageræ§ä»¶ï¼
<span style="padding: 0px; margin: 0px; font-size: 14px;"><RelativeLayout 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.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/viewpager"
android:background="#33000000"
android:orientation="vertical"
android:padding="5dip" >
<TextView
android:id="@+id/tv_image_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="第ä¸ä¸ªå¼å¯¼é¡µé¢"
android:textColor="@android:color/white"
android:textSize="14sp" />
<LinearLayout
android:id="@+id/ll_points"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dip"
android:layout_gravity="center_horizontal"
android:orientation="horizontal" >
</LinearLayout>
</LinearLayout>
</RelativeLayout></span>
2ãæ¥ä¸æ¥å®ç°ä¸ä¸ªç»§æ¿PagerAdapterçMyAdapterç±»ï¼å®ç°ä¸ä¸ªPagerAdapterï¼ä»£ç å¦ä¸ï¼
<span style="padding: 0px; margin: 0px; font-size: 14px;">package com.example.viewpagertest;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
class ViewPagerAdapter extends PagerAdapter {
private List<ImageView> mImageViewList;
public ViewPagerAdapter(List<ImageView> imageViewList) {
super();
this.mImageViewList = imageViewList;
}
/**
* 该æ¹æ³å°è¿åæå
å«ç Itemæ»ä¸ªæ°ã为äºå®ç°ä¸ç§å¾ªç¯æ»å¨çææï¼è¿åäºåºæ¬æ´åçæ大å¼ï¼è¿æ ·å°±ä¼å建å¾å¤çItem,
* å
¶å®è¿å¹¶éæ¯çæ£çæ é循ç¯ã
*/
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
/**
* å¤æåºå»çviewæ¯å¦çäºè¿æ¥çview å¦æ为trueç´æ¥å¤ç¨
*/
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
/**
* éæ¯é¢å 载以å¤çview对象, ä¼æéè¦éæ¯ç对象çç´¢å¼ä½ç½®ä¼ è¿æ¥ï¼å°±æ¯positionï¼
* å 为mImageViewListåªæäºæ¡æ°æ®ï¼èpositionå°ä¼åå°å¾å¤§çå¼ï¼
* æ以使ç¨åä½æ°çæ¹æ³æ¥è·åæ¯ä¸æ¡æ°æ®é¡¹ã
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mImageViewList.get(position % mImageViewList.size()));
}
/**
* å建ä¸ä¸ªviewï¼
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mImageViewList.get(position % mImageViewList.size()));
return mImageViewList.get(position % mImageViewList.size());
}
}
</span>
3ãæåæ¯ä¸»çé¢é¨åç代ç ï¼
<span style="padding: 0px; margin: 0px; font-size: 14px;">package com.example.viewpagertest;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
public class MainActivity extends Activity implements OnPageChangeListener {
private List<ImageView> imageViewList;
private TextView tvDescription;
private LinearLayout llPoints;
private String[] imageDescriptions;
private int previousSelectPosition = 0;
private ViewPager mViewPager;
private boolean isLoop = true;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setView();
initView();
}
public void setView() {
setContentView(R.layout.activity_splash_viewpager);
// èªå¨åæ¢é¡µé¢åè½
new Thread(new Runnable() {
@Override
public void run() {
while (isLoop) {
SystemClock.sleep(2000);
handler.sendEmptyMessage(0);
}
}
}).start();
}
public void initView() {
mViewPager = (ViewPager) findViewById(R.id.viewpager);
tvDescription = (TextView) findViewById(R.id.tv_image_description);
llPoints = (LinearLayout) findViewById(R.id.ll_points);
prepareData();
ViewPagerAdapter adapter = new ViewPagerAdapter(imageViewList);
mViewPager.setAdapter(adapter);
mViewPager.setOnPageChangeListener(this);
tvDescription.setText(imageDescriptions[previousSelectPosition]);
llPoints.getChildAt(previousSelectPosition).setEnabled(true);
/**
* 2147483647 / 2 = 1073741820 - 1
* 设置ViewPagerçå½å项为ä¸ä¸ªæ¯è¾å¤§çæ°ï¼ä»¥ä¾¿ä¸å¼å§å°±å¯ä»¥å·¦å³å¾ªç¯æ»å¨
*/
int n = Integer.MAX_VALUE / 2 % imageViewList.size();
int itemPosition = Integer.MAX_VALUE / 2 - n;
mViewPager.setCurrentItem(itemPosition);
}
private void prepareData() {
imageViewList = new ArrayList<ImageView>();
int[] imageResIDs = getImageResIDs();
imageDescriptions = getImageDescription();
ImageView iv;
View view;
for (int i = 0; i < imageResIDs.length; i++) {
iv = new ImageView(this);
iv.setBackgroundResource(imageResIDs[i]);
imageViewList.add(iv);
// æ·»å ç¹view对象
view = new View(this);
view.setBackgroundDrawable(getResources().getDrawable(R.drawable.point_background));
LayoutParams lp = new LayoutParams(5, 5);
lp.leftMargin = 10;
view.setLayoutParams(lp);
view.setEnabled(false);
llPoints.addView(view);
}
}
private int[] getImageResIDs() {
return new int[]{
R.drawable.bg1,
R.drawable.bg2,
R.drawable.bg3,
R.drawable.pic_01,
R.drawable.pic_02
};
}
private String[] getImageDescription() {
return new String[]{
"第ä¸ä¸ªå¼å¯¼é¡µé¢",
"第äºä¸ªå¼å¯¼é¡µé¢",
"第ä¸ä¸ªå¼å¯¼é¡µé¢",
"第å个å¼å¯¼é¡µé¢",
"第äºä¸ªå¼å¯¼é¡µé¢"
};
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int position) {
// æ¹åå¾ççæè¿°ä¿¡æ¯
tvDescription.setText(imageDescriptions[position % imageViewList.size()]);
// åæ¢éä¸çç¹,æåä¸ä¸ªç¹ç½®ä¸ºnormalç¶æ
llPoints.getChildAt(previousSelectPosition).setEnabled(false);
// æå½åéä¸çposition对åºçç¹ç½®ä¸ºenabledç¶æ
llPoints.getChildAt(position % imageViewList.size()).setEnabled(true);
previousSelectPosition = position % imageViewList.size();
}
@Override
protected void onDestroy() {
super.onDestroy();
isLoop = false;
}
}
</span>