viewpage自动轮播

xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="250dp">
        <android.support.v4.view.ViewPager
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:id="@+id/viewpage"
            ></android.support.v4.view.ViewPager>
        <LinearLayout
            android:id="@+id/dot_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:gravity="bottom|right"
            >
        </LinearLayout>
    </RelativeLayout>

   <ListView
       android:id="@+id/listview"
       android:layout_width="match_parent"
       android:layout_height="match_parent"></ListView>
</LinearLayout>
//vp子项布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/vp_itemimg"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <TextView
        android:id="@+id/vp_itemtv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="10dp"
        android:text="文字"
        android:textColor="@android:color/white" />
</RelativeLayout>
//两种点的shape

//白点,灰点省略

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval"
    >
<corners android:radius="5dp"/>
    <solid android:color="@android:color/white"/>
</shape>
//主Activity
<pre name="code" class="java">public class MainActivity extends AppCompatActivity {

    private ViewPager vp;
    private ListView lv;
    private LinearLayout dot_container;
    private List<VpBean.Item> vpDataList;
    int currentItem=0;
    int oldposition=0;
    //Handler
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            currentItem++;
            vp.setCurrentItem(currentItem);
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //初始化控件
        initView();
        //获得viewpage的适配数据
        getVpData();
        //获得listview的适配器
        getLvData();
    }

    private void getLvData() {

    }

    private void getVpData() {

        new AsyncTask<String,Void,String>(){

            @Override
            protected String doInBackground(String... strings) {
                try {
                    String path=strings[0];
                    URL url=new URL(path);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setRequestMethod("GET");
                    conn.setConnectTimeout(5000);
                    int code = conn.getResponseCode();
                    if(code==200){
                        InputStream is = conn.getInputStream();
                        String json = StreamTools.readData(is);
                        return json;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                Gson gson=new Gson();
                VpBean vpData=gson.fromJson(s,VpBean.class);
                //获得适配数据的集合
                vpDataList = vpData.items;
                //请求数据,加点
                adddots();
                //适配数据
                vp.setAdapter(new PagerAdapter() {

                    private TextView vp_tv;
                    private ImageView vp_img;

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

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

                    @Override
                    public Object instantiateItem(ViewGroup container, int position) {
                        View view=View.inflate(MainActivity.this,R.layout.vp_item,null);
                        //获得控件
                        vp_img = (ImageView) view.findViewById(R.id.vp_itemimg);
                        vp_tv = (TextView) view.findViewById(R.id.vp_itemtv);
                        ImageLoader imageLoader=ImageLoader.getInstance();
                        imageLoader.displayImage(vpDataList.get(position%vpDataList.size()).path,vp_img);
                        vp_tv.setText(vpDataList.get(position%vpDataList.size()).title);
                        container.addView(view);
                        return view;
                    }

                    @Override
                    public void destroyItem(ViewGroup container, int position, Object object) {
                        //super.destroyItem(container, position, object);
                        View view=View.inflate(MainActivity.this,R.layout.vp_item,null);
                        container.removeView(view);
                    }


                });
                //定时器
                Timer timer=new Timer();
                timer.schedule(new TimerTask() {
                    @Override
                    public void run() {
                        Message msg=Message.obtain();

                        handler.sendMessage(msg);
                    }
                },2000,2000);

                //vp监听
                vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                    @Override
                    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                    }

                    @Override
                    public void onPageSelected(int position) {
                        currentItem = position;
                        //改变点的颜色
                        dot_container.getChildAt(currentItem%vpDataList.size()).setBackgroundResource(R.drawable.dot_white);
                        dot_container.getChildAt(oldposition).setBackgroundResource(R.drawable.dot_gray);
                        oldposition = currentItem%vpDataList.size();
                    }

                    @Override
                    public void onPageScrollStateChanged(int state) {

                    }
                });
            }
        }.execute("http:路径");
    }

    private void adddots() {
        // 加点
        for (int i = 0; i < vpDataList.size(); i++) {
            View point = new View(MainActivity.this);
            if (i == 0) {
                point.setBackgroundResource(R.drawable.dot_white);
            } else {
                point.setBackgroundResource(R.drawable.dot_gray);
            }
            // 点的大小
            int p = 15;
            android.widget.LinearLayout.LayoutParams params = new android.widget.LinearLayout.LayoutParams(
                    5, 5);// 这里单位是px
            // 点的间隔
            params.rightMargin = 10;
            point.setLayoutParams(params);

            // 添加到容器
            dot_container.addView(point);
        }
    }

    private void initView() {
        setContentView(R.layout.activity_main);
        vp = (ViewPager) findViewById(R.id.viewpage);
        lv = (ListView) findViewById(R.id.listview);
        dot_container = (LinearLayout) findViewById(R.id.dot_container);
    }
}


先请求数据,动态加点,适配器,timer定时器,viewpage监听


 





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值