ViewPager无限轮播+轮播时下面的小点跟着走

小点的实现是自定义的view,监听viewpager的滑动而改变背景颜色,实现小点跟着动的效果
两个自定义的xml
1 dot_focused

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <corners android:radius="5dip" /><!-- 背景的填充颜色 -->  

    <solid android:color="#aaFFFFFF" /><!-- 边角圆弧的半径 -->  

</shape>

2 dot_normal

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <corners android:radius="5dip" />

    <solid android:color="#55000000" />

</shape>

—————-布局——————

<android.support.v4.view.ViewPager
        android:id="@+id/f1_vp"
        android:layout_below="@id/rl_1"
        android:layout_width="match_parent"
        android:layout_height="180dp"
         />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/f1_vp"
        android:layout_marginTop="-30dp"
        android:layout_alignParentRight="true"
        android:layout_marginRight="20dp"
        android:orientation="horizontal">

        <View
            android:id="@+id/dot_1"
            android:layout_width="10dip"
            android:layout_height="10dip"
            android:layout_marginLeft="2dip"
            android:layout_marginRight="2dip"
            android:background="@drawable/dot_normal" />

        <View
            android:id="@+id/dot_2"
            android:layout_width="10dip"
            android:layout_height="10dip"
            android:layout_marginLeft="2dip"
            android:layout_marginRight="2dip"
            android:background="@drawable/dot_normal" />

        <View
            android:id="@+id/dot_3"
            android:layout_width="10dip"
            android:layout_height="10dip"
            android:layout_marginLeft="2dip"
            android:layout_marginRight="2dip"
            android:background="@drawable/dot_normal" />

        <View
            android:id="@+id/dot_4"
            android:layout_width="10dip"
            android:layout_height="10dip"
            android:layout_marginLeft="2dip"
            android:layout_marginRight="2dip"
            android:background="@drawable/dot_normal" />

        <View
            android:id="@+id/dot_5"
            android:layout_width="10dip"
            android:layout_height="10dip"
            android:layout_marginLeft="2dip"
            android:layout_marginRight="2dip"
            android:background="@drawable/dot_normal" />
        <View
            android:id="@+id/dot_6"
            android:layout_width="10dip"
            android:layout_height="10dip"
            android:layout_marginLeft="2dip"
            android:layout_marginRight="2dip"
            android:background="@drawable/dot_normal" />
        <View
            android:id="@+id/dot_7"
            android:layout_width="10dip"
            android:layout_height="10dip"
            android:layout_marginLeft="2dip"
            android:layout_marginRight="2dip"
            android:background="@drawable/dot_normal" />
        <View
            android:id="@+id/dot_8"
            android:layout_width="10dip"
            android:layout_height="10dip"
            android:layout_marginLeft="2dip"
            android:layout_marginRight="2dip"
            android:background="@drawable/dot_normal" />
    </LinearLayout>

—————适配器————-

import android.content.Context;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.lidroid.xutils.BitmapUtils;

import java.util.List;

import yunifang.bawei.administrator.yunifang.homebean.Ad1;

/**
* Created by Administrator on 2016-9-6.
*/
public class LuenBoAdapter extends PagerAdapter {

private final Context context;
private List<Ad1> ad1;
private BitmapUtils utils;

public LuenBoAdapter(Context context, List<Ad1> ad1) {
    this.context = context;
    this.ad1 = ad1;
    utils=new BitmapUtils(context);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    String img=ad1.get(position%ad1.size()).getImage();
    ImageView imgview=new ImageView(context);
    utils.display(imgview,img);
    //填充整个布局
    imgview.setScaleType(ImageView.ScaleType.FIT_XY);
    //得到布局参数对象
    ViewPager.LayoutParams layoutParams=new ViewPager.LayoutParams();
    //设置高为填充父窗体
    layoutParams.width= ViewPager.LayoutParams.MATCH_PARENT;
    layoutParams.height= ViewPager.LayoutParams.MATCH_PARENT;
    //设置imageview的参数
    imgview.setLayoutParams(layoutParams);
    container.addView(imgview);
    return imgview;
}

@Override
public int getCount() {
    return 10000;
}

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

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
}

}
——fragment或者activity中的代码————–




import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.gson.Gson;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;


import yunifang.bawei.administrator.yunifang.Adapter.LuenBoAdapter;
import yunifang.bawei.administrator.yunifang.R;
import yunifang.bawei.administrator.yunifang.homebean.Ad1;
import yunifang.bawei.administrator.yunifang.homebean.HomeBean;

/**
 * Created by Administrator on 2016-9-6.
 */
public class F1Fragment extends Fragment {
    String jiekou="http://m.yunifang.com/yunifang/mobile/home?random=17257&encode=56f7b9f64804f3c6423bb3ee62eab517";
    private ViewPager vp;
    private View dot1,dot2,dot3,dot4,dot5,dot6,dot7,dot8;
    private List<View> dots=new ArrayList<View>();
    private int oldPosition = 0;// 记录上一次点的位置
    private int currentItem; // 当前页面
//    int[] imgs=new int[]{
//            R.mipmap.lunbo1,R.mipmap.lunbo2,R.mipmap.lunbo3,R.mipmap.lunbo4,R.mipmap.lunbo5,R.mipmap.lunbo1,R.mipmap.lunbo2,R.mipmap.lunbo3
//    };
   private List<Ad1> ad1;


    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            int i=msg.what;
            if (i==0){
                HomeBean homeBean= (HomeBean) msg.obj;
                ad1 = homeBean.getData().getAd1();
                vp.setAdapter(new LuenBoAdapter(getActivity(),ad1));
                vp.setCurrentItem(10000/2-10000/2%ad1.size());
                handler.sendEmptyMessageDelayed(2,2000);
                dots.get(0).setBackgroundResource(R.drawable.dot_focused);
            }else if (i == 2){
                //得到当前位置
                int currentItem=vp.getCurrentItem();
                vp.setCurrentItem(currentItem += 1);
                //继续发送
                handler.sendEmptyMessageDelayed(2,3000);
            }
            //对viewpager滑动进行监听
            //设置第一个点为选中

            vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                    dots.get(oldPosition).setBackgroundResource(
                            R.drawable.dot_normal);
                    dots.get(position%ad1.size())
                            .setBackgroundResource(R.drawable.dot_focused);

                    oldPosition = position%ad1.size();
                    currentItem = position;
                }
                @Override
                public void onPageSelected(int position) {
                }
                @Override
                public void onPageScrollStateChanged(int state) {
                }
            });


        }
    };

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return View.inflate(getActivity(), R.layout.f1,null);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        vp= (ViewPager) getActivity().findViewById(R.id.f1_vp);
        dot1=getActivity().findViewById(R.id.dot_1);
        dot2=getActivity().findViewById(R.id.dot_2);
        dot3=getActivity().findViewById(R.id.dot_3);
        dot4=getActivity().findViewById(R.id.dot_4);
        dot5=getActivity().findViewById(R.id.dot_5);
        dot6=getActivity().findViewById(R.id.dot_6);
        dot7=getActivity().findViewById(R.id.dot_7);
        dot8=getActivity().findViewById(R.id.dot_8);
        dots.add(dot1);
        dots.add(dot2);
        dots.add(dot3);
        dots.add(dot4);
        dots.add(dot5);
        dots.add(dot6);
        dots.add(dot7);
        dots.add(dot8);
        getdata();//请求数据


    }
    //请求数据
    private void getdata(){
        new Thread(){
            @Override
            public void run() {
                try {
                    URL url=new URL(jiekou);
                    HttpURLConnection conn= (HttpURLConnection) url.openConnection();
                    InputStream inputStream = conn.getInputStream();
                    //解析
                    Gson gson=new Gson();
                    HomeBean homeBean = gson.fromJson(new InputStreamReader(inputStream), HomeBean.class);
                    Message msg=Message.obtain();
                    msg.what=0;
                    msg.obj=homeBean;
                    handler.sendMessage(msg);
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }




}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值