您的位置:首页 > 其它

viewpager 左右循环 导航任意定位 状态显示

2013-05-20 15:22 239 查看
花了3天时间研究了viewpager的使用,对于其原理有了一个深刻的认识,总结如下:

1.在导航栏里任意点击,可以定位到相对应的页面;

2.左右循环控制,页面设置FABCDEFA;

3.从setCurrentItem(1,fasle);

4.注意:导航从12345,页面从0123456;

5.缓存012三个view;

源代码下载:http://download.csdn.net/detail/avenleft/5414673

package com.example.myviewpager;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

import android.support.v4.view.ViewPager.OnPageChangeListener;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.view.ViewGroup.LayoutParams;

import android.widget.ImageView;

import android.widget.TextView;

/**

* viewpager使用完整版,实现了循环滑动,以及按钮的点击,状态图标的切换

*

public class MainActivity extends Activity {

private static String TAG = "MainActivity";

private static ViewPager viewPager;

private static List<View> views;// viewpager中所有的view

private static List<TextView> textViews;// 首页导航指示

private TextView textView1;

private TextView textView2;

private TextView textView3;

private TextView textView4;

private TextView textView5;

private TextView textView6;

private ImageView imageView;

private ViewGroup main;// 包裹滑动图片LinearLayout

private ImageView[] imageViews;

private ViewGroup group;// 包裹小圆点的LinearLayout

private static int length = 0;

private LayoutInflater inflater;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

initComponent();

initTextView();

initViewPager();

initViewGroup();

setContentView(main);

}

private void initComponent() {

inflater = getLayoutInflater();

main = (ViewGroup) inflater.inflate(R.layout.viewpager_demo1, null);

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

group = (ViewGroup) main.findViewById(R.id.viewGroup);

textView1 = (TextView) main.findViewById(R.id.textView1);

textView2 = (TextView) main.findViewById(R.id.textView2);

textView3 = (TextView) main.findViewById(R.id.textView3);

textView4 = (TextView) main.findViewById(R.id.textView4);

textView5 = (TextView) main.findViewById(R.id.textView5);

textView6 = (TextView) main.findViewById(R.id.textView6);

}

private void initTextView() {

textViews = new ArrayList<TextView>();

textViews.add(textView1);

textViews.add(textView2);

textViews.add(textView3);

textViews.add(textView4);

textViews.add(textView5);

textViews.add(textView6);

textViews.get(0).setTextColor(Color.RED);

textView1.setOnClickListener(new MyTextViewClick(0));

textView2.setOnClickListener(new MyTextViewClick(1));

textView3.setOnClickListener(new MyTextViewClick(2));

textView4.setOnClickListener(new MyTextViewClick(3));

textView5.setOnClickListener(new MyTextViewClick(4));

textView6.setOnClickListener(new MyTextViewClick(5));

}

private void initViewPager() {

views = new ArrayList<View>();

LayoutInflater layoutInflater = LayoutInflater.from(this);

View view1 = (View) layoutInflater.inflate(R.layout.item01, null);

View view2 = (View) layoutInflater.inflate(R.layout.item02, null);

View view3 = (View) layoutInflater.inflate(R.layout.item03, null);

View view4 = (View) layoutInflater.inflate(R.layout.item04, null);

View view5 = (View) layoutInflater.inflate(R.layout.item05, null);

View view6 = (View) layoutInflater.inflate(R.layout.item06, null);

// 循环滑动:头部添加一个和原尾部相同的view,尾部添加一个和原头部相同的view

View view0 = (View) layoutInflater.inflate(R.layout.item06, null);

View view7 = (View) layoutInflater.inflate(R.layout.item01, null);

views.add(view0);

views.add(view1);

views.add(view2);

views.add(view3);

views.add(view4);

views.add(view5);

views.add(view6);

views.add(view7);

length = views.size();// 获得显示页面的实际个数

viewPager.setAdapter(pageAdapter);

viewPager.setCurrentItem(1, false);

// 起始页为第一页,循环显示的时候,61234561,第0个放第6个页面,第7个放第0个页面

viewPager.setOnPageChangeListener(new MyOnPageChangeListener());

}

private void initViewGroup() {

//导航显示只有8-2=6页

imageViews = new ImageView[length-2];

for (int i = 0; i < length-2; i++) {

imageView = new ImageView(MainActivity.this);

imageView.setLayoutParams(new LayoutParams(20, 20));

imageView.setPadding(20, 0, 20, 0);

imageViews[i] = imageView;

if (i == 0) {

// 默认选中第一张图片

imageViews[i]

.setBackgroundResource(R.drawable.page_indicator_focused);

} else {

imageViews[i].setBackgroundResource(R.drawable.page_indicator);

}

group.addView(imageViews[i]);

}

}

private final class MyTextViewClick implements View.OnClickListener {

private int index = 0;

public MyTextViewClick(int i) {

index = i;

}

@Override

public void onClick(View v) {

//导航索引的位置要比实际显示的页面少1

viewPager.setCurrentItem(index + 1, false);//false平滑过渡取消,效果不显示

changeTitleShow(index);

}

}

private void changeTitleShow(int show) {

for (int i = 0; i < textViews.size(); i++) {

if (show == i) {

textViews.get(i).setTextColor(Color.RED);

} else {

textViews.get(i).setTextColor(Color.BLACK);

}

}

}

private static final PagerAdapter pageAdapter = new PagerAdapter() {

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0 == (arg1);

}

@Override

public int getCount() {

return length;

}

@Override

public void destroyItem(View container, int position, Object object) {

View currentView = views.get(position);

((ViewPager) container).removeView(currentView);

Log.i(TAG, "destroyItem-" + position + "-" + currentView);

Log.i(TAG, "------------------------------");

}

@Override

public Object instantiateItem(View container, int position) {

View currentView = views.get(position);

((ViewPager) container).addView(currentView);

Log.i(TAG, "instantiateItem-" + position + "-" + currentView);

Log.i(TAG, "------------------------------");

return currentView;

}

};

private final class MyOnPageChangeListener implements OnPageChangeListener {

@Override

public void onPageScrollStateChanged(int arg0) {

// Log.i(TAG,"onPageScrollStateChanged-"+arg0);

// Log.i(TAG,"------------------------------");

}

@Override

public void onPageScrolled(int arg0, float arg1, int arg2) {

// Log.i(TAG,"onPageScrolled-"+arg0+"-"+arg2);

// Log.i(TAG,"------------------------------");

}

@Override

public void onPageSelected(int position) {

// 当前页为0时改为倒数第二个,也就是实际需要的最后一个view;当前页为最后一个时改为第二个,即实际上的第一个view

Log.i(TAG, "onPageSelected-" + position);

Log.i(TAG, "------------------------------");

int showIndex = position;

if (position == 0) {

showIndex = length - 2;

viewPager.setCurrentItem(length - 2, false);

} else {

if (position == length - 1) {

showIndex = 1;

viewPager.setCurrentItem(1, false);

}

}

changeTitleShow(showIndex - 1);

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

imageViews[showIndex - 1]

.setBackgroundResource(R.drawable.page_indicator_focused);

if (showIndex - 1 != i) {

imageViews[i]

.setBackgroundResource(R.drawable.page_indicator);

}

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: