viewpager+fragment嵌套viewpager图片广告导致广告图片不能滑动的问题用LinearLayout实现



外层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);
}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值