外层ViewPager需要重写canScroll()方法;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.View;
public class MyViewPager extends ViewPager {
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
//主要复写的方法
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
if (v != this && v instanceof ViewPager) {
return true;
}
return super.canScroll(v, checkV, dx, x, y);
}
}
activity层ViewPager布局主要引用复写后的MyViewPager:
<***包名***.MyViewPager
android:id="@+id/vp_Teacher"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/rg_Teacher"
android:layout_below="@+id/ll_Ttitle" >
</***包名***.MyViewPager>
Fragment层布局:
<!-- 放置轮播图片位置 -->
<RelativeLayout
android:id="@+id/rl_adv"
android:layout_width="match_parent"
android:layout_height="185dip"
android:background="@android:color/darker_gray" >
<LinearLayout
android:id="@+id/top_news_viewpager_ll"
android:layout_width="match_parent"
android:layout_height="185dip"
android:orientation="horizontal" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dip"
android:layout_alignParentBottom="true"
android:gravity="center"
android:orientation="horizontal" >
<!-- 放置图片中选中点的位置 -->
<LinearLayout
android:id="@+id/dots_ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dip"
android:orientation="horizontal" />
</LinearLayout>
</RelativeLayout>
activity的代码就不写了,主要展示Fragment的代码:
public class TteachFragment extends Fragment implements OnClickListener {
// 存放轮播图的线性布局
private LinearLayout llAdvPic;
// 存放指示点的线性布局
private LinearLayout llPoint;
// 存放指示点的集合
private List<ImageView> pointList = new ArrayList<ImageView>();;
// 上一个指示点
private int lastPosition = 0;
private int[] urls = { R.drawable.aa, R.drawable.bb, R.drawable.cc,
R.drawable.dd, R.drawable.e };
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_tclass, null);
// 初始化控件
setViews(view);
return view;
}
private void setViews(View view) {
lastPosition = 0;
llAdvPic = (LinearLayout) view.findViewById(R.id.top_news_viewpager_ll);
llPoint = (LinearLayout) view.findViewById(R.id.dots_ll);
// 第一步:添加轮播图(也可以直接将布局写成咱们自定义的viewpager)
RollViewPager rollViewPager = new RollViewPager(getActivity());
llAdvPic.addView(rollViewPager);
// 第二步:传递轮播图需要的图片url集合或者数组(在真实项目中我们需要获得图片的url集合,然后传递给轮播图)
rollViewPager.setImageUrls(urls);
// 第三步:添加指示点
addPoints();
// 第四步:给轮播图添加界面改变监听,切换指示点
rollViewPager
.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
position = position % urls.length;
// 切换指示点
pointList.get(lastPosition).setImageResource(
R.drawable.dot_normal);
pointList.get(position).setImageResource(
R.drawable.dot_focus);
lastPosition = position;
}
@Override
public void onPageScrolled(int position,
float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
// 第五步:轮播图点击监听
rollViewPager
.setOnItemClickListener(new RollViewPager.OnItemClickListener() {
@Override
public void onItemClick(int position) {
// ToastUtil.showStaticToast(getActivity(), position +
// "");
}
});
// 第六步:设置当前页面,最好不要写最大数除以2,其实写了50就足够了,谁没事无聊到打开app二话不说直接对着轮播图往相反方向不停的划几十下
rollViewPager.setCurrentItem(50 - 50 % urls.length);
// 第七步:设置完之后就可以轮播了:开启自动轮播
rollViewPager.startRoll();
}
private void addPoints() {
pointList.clear();
llPoint.removeAllViews();
for (int x = 0; x < urls.length; x++) {
ImageView imageView = new ImageView(getActivity());
imageView.setImageResource(R.drawable.dot_normal);
// 导报的时候指示点的父View是什么布局就导什么布局的params,这里导的是线性布局
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
// 设置间隔
params.leftMargin = 36;
// 添加到线性布局;params指定布局参数,不然点就按在一起了
llPoint.addView(imageView, params);
// 把指示点存放到集合中
pointList.add(imageView);
}
}