View滑动时的下面图片圆点的改变
1.View滑动时下面圆点改变的方法步骤是:
(1)首先在布局中添加一个LinearLayout,用于存放代表标志的图片
<LinearLayout
android:id="@+id/linear_point"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center"
android:layout_marginBottom="50dp"
android:orientation="horizontal"></LinearLayout>
(2)在MainActivity中通过findViewById找到该LinearLayout的布局,然后new 一个ImageView,通过setLayoutParams来设置图片的宽度和高度
(3)然后通过setImageResource方法设置在不选择中的状态下的标志图片
(4)new一个List创建一个新的ArrayList<>()然后将这些图片添加到里面,同时也添加到LinearLayout中(有几个View就添加几个,可以通过for循环来实现)
(5)在第一个View中设置标志图片为选中状态
mPoints=new ArrayList<>();
for(int i=0;i<mViews.size();i++) {
ImageView iv1 = new ImageView(this);
iv1.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
iv1.setImageResource(R.mipmap.eqe);
mPoints.add(iv1);
mLinearPoint.addView(iv1);
}
mPoints.get(0).setImageResource(R.mipmap.eqd);
(6)利用addOnPageChangeListener方法来改变当前View的选中状态
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
for(ImageView iv:mPoints){
iv.setImageResource(R.mipmap.eqe);
}
mPoints.get(position%mViews.size()).setImageResource(R.mipmap.eqd);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
ViewPager实现伪无线循环方法步骤
1.在Adapter中的getCount方法中将返回值设置为Integer.MAX_VALUE
public int getCount() {
return Integer.MAX_VALUE;
}
2.在instantiateItem方法中判断父组件是否为空,如果不为空就将View移除掉,然后添加View
public Object instantiateItem(ViewGroup container, int position) {
View view=mViews.get(position%mViews.size());
if(view.getParent()!=null){
container.removeView(view);
}
container.addView(view);
return mViews.get(position%mViews.size());
}
3.将所有有关position的全部取余数
4.将View放到中间
//这里是为了让view显示在中间,这样就在开始的时候就可以进行左右滑动。减去先除2然后取余的作用是为了防止当view的个数
//的不同导致第一个view不显示在第一个的问题
mViewPager.setCurrentItem(Integer.MAX_VALUE/2-Integer.MAX_VALUE/2%mViews.size());
PagerTab的用法
1.在布局中添加PagerTabStrip。一定是在viewpager中添加的
<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="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"></android.support.v4.view.PagerTabStrip>
</android.support.v4.view.ViewPager>
2.在MainActivity中设置Pager的参数
mPagerTab= (PagerTabStrip) findViewById(R.id.pagertab);
mPagerTab.setBackgroundColor(Color.WHITE);
mPagerTab.setTabIndicatorColor(Color.BLUE);
mPagerTab.setDrawFullUnderline(true);
mPagerTab.setTextColor(Color.BLACK);
整体代码
XML
<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"
tools:context=".MainActivity"
android:padding="20dp">
<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="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"></android.support.v4.view.PagerTabStrip>
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/linear_point"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center"
android:layout_marginBottom="50dp"
android:orientation="horizontal"></LinearLayout>
</RelativeLayout>
MainActivity
package com.my.viewpagertest;
import android.graphics.Color;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
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.widget.ImageView;
import android.widget.LinearLayout;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ViewPager mViewPager;
private List<View> mViews;
private LayoutInflater mInflater;
private LinearLayout mLinearPoint;
private List<ImageView> mPoints;
private PagerTabStrip mPagerTab;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager= (ViewPager) findViewById(R.id.viewpager);
mViews=new ArrayList<>();
mLinearPoint= (LinearLayout) findViewById(R.id.linear_point);
mInflater=getLayoutInflater();
View view1=mInflater.inflate(R.layout.viewpager_item_one,null);
View view2=mInflater.inflate(R.layout.viewpager_item_two,null);
View view3=mInflater.inflate(R.layout.viewpager_item_three,null);
mViews.add(view1);
mViews.add(view2);
mViews.add(view3);
mPoints=new ArrayList<>();
for(int i=0;i<mViews.size();i++) {
ImageView iv1 = new ImageView(this);
iv1.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
iv1.setImageResource(R.mipmap.eqe);
mPoints.add(iv1);
mLinearPoint.addView(iv1);
}
mPoints.get(0).setImageResource(R.mipmap.eqd);
ViewPagerAdapter adapter=new ViewPagerAdapter(mViews);
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 iv:mPoints){
iv.setImageResource(R.mipmap.eqe);
}
mPoints.get(position%mViews.size()).setImageResource(R.mipmap.eqd);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
//这里是为了让view显示在中间,这样就在开始的时候就可以进行左右滑动。减去先除2然后取余的作用是为了防止当view的个数
//的不同导致第一个view不显示在第一个的问题
mViewPager.setCurrentItem(Integer.MAX_VALUE/2-Integer.MAX_VALUE/2%mViews.size());
mPagerTab= (PagerTabStrip) findViewById(R.id.pagertab);
mPagerTab.setBackgroundColor(Color.WHITE);
mPagerTab.setTabIndicatorColor(Color.BLUE);
mPagerTab.setDrawFullUnderline(true);
mPagerTab.setTextColor(Color.BLACK);
}
}
Adapter
package com.my.viewpagertest;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
/**
* Created by Administrator on 2015/9/1.
*/
public class ViewPagerAdapter extends PagerAdapter {
private List<View> mViews;
private String [] titles={"Jinx","Jie","Eyun"};
public ViewPagerAdapter(List<View> mViews) {
this.mViews = mViews;
}
@Override
public CharSequence getPageTitle(int position) {
return titles[position%titles.length];
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// super.destroyItem(container, position, object);
// container.removeView(mViews.get(position%mViews.size()));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view=mViews.get(position%mViews.size());
if(view.getParent()!=null){
container.removeView(view);
}
container.addView(view);
return mViews.get(position%mViews.size());
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
}