您的位置:首页 > 其它

ViewPager

2015-09-06 23:00 246 查看
学习资料

fragmentviewpager的资料

http://blog.csdn.net/harvic880925/article/details/38660861


viewpager实现多个图片的水平滚动

http://www.cnblogs.com/android100/p/Android-ViewPager-scroll-pic.html


需要注意的是1.在无限循环中要注意什么时候addView什么时候removeView

2.无限循环的原理

主界面

<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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.PagerTabStrip
android:id="@+id/pagertab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom">

</android.support.v4.view.PagerTabStrip>

</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/linearlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center"
android:layout_marginBottom="10dp"></LinearLayout>
</RelativeLayout>


加载的三个view

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/jingse"/>

</LinearLayout>


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/meinv"/>

</LinearLayout>


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/fengjing"/>

</LinearLayout>


MyPagerAdapter

public class MyPagerAdapter extends PagerAdapter {
private List<View> views;
private String[] mTitle={"标题1","标题2","标题3"};

public MyPagerAdapter(List<View> views ) {
this.views = views;
}
//加载标题的覆写的方法
@Override
public CharSequence getPageTitle(int position) {
return mTitle[position%mTitle.length];
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//      container.removeView(views.get(position%views.size())); //在无限循环中不去掉这个会把前面加载的界面销毁当翻滚到前面的界面时界面消失
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
//在无限循环中向前滑动时需要把前面加载的View移除
View view=views.get(position%views.size());
if (view!=null){
container.removeView(view);
}
container.addView(views.get(position%views.size()));//加载View必须放在removeView()后面不然会加载重复
return views.get(position%views.size()) ;
}

@Override
public int getCount() {
return Integer.MAX_VALUE;
}

@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
}


主Activity

public class MainActivity extends AppCompatActivity {
private ViewPager mViewPager;
private List<View> views;
private LinearLayout mLinearLayout;
private List<ImageView> mPoints;
private PagerTabStrip mPagerTab;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPagerTab= (PagerTabStrip) findViewById(R.id.pagertab);
mLinearLayout = (LinearLayout) findViewById(R.id.linearlayout);
views = new ArrayList<>();
mViewPager = (ViewPager) findViewById(R.id.viewpager);
View view1 = getLayoutInflater().inflate(R.layout.item1, null);
View view2 = getLayoutInflater().inflate(R.layout.item2, null);
View view3 = getLayoutInflater().inflate(R.layout.item3, null);
views.add(view1);
views.add(view2);
views.add(view3);
mPoints = new ArrayList<>();
for (int i = 0; i <3 ; i++) {
ImageView img1 = new ImageView(this);
img1.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));//设置宽和高
//            LinearLayout.LayoutParams params= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//            params.setMargins(20,20,20,20);//设置圆点的距离
//            img1.setLayoutParams(params);
img1.setPadding(20,20,20,20);//设置圆点的距离
img1.setImageResource(R.mipmap.point_normal);
mPoints.add(img1);
mLinearLayout.addView(img1);//添加img到Linewlayout中
mPagerTab.setBackgroundColor(Color.GRAY);
mPagerTab.setTabIndicatorColor(Color.RED);
mPagerTab.setTextColor(Color.BLUE);
mPagerTab.setDrawFullUnderline(true);
mPagerTab.setGravity(Gravity.BOTTOM);//设置Tab的位置
}
mPoints.get(0).setImageResource(R.mipmap.point_select);//设置第一个页面为红点

MyPagerAdapter adapter = new MyPagerAdapter(views);
adapter.notifyDataSetChanged();
mViewPager.setAdapter(adapter);

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
for(ImageView im:mPoints){
im.setImageResource(R.mipmap.point_normal);
}
mPoints.get(position%views.size()).setImageResource(R.mipmap.point_select);

}

@Override
public void onPageScrollStateChanged(int state) {

}
});
mViewPager.setCurrentItem(Integer.MAX_VALUE/2-Integer.MAX_VALUE/2/3%views.size());
}

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