编写轮播图Viewpager

一:在所有工作开始前,我们先准备好布局和资源:两张不同状态的按钮,四张图片

      (在布局中需要注意几点:想要radiogroup放在Viewpager下面的话,需要用到

     
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.com.wechart.Activity.MainActivity"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="200dp">
   <android.support.v4.view.ViewPager
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/main_relativelayout"
       >
   </android.support.v4.view.ViewPager>

    <RadioGroup
        android:layout_centerInParent="true"
        android:gravity="center"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:padding="6dp"
        android:orientation="horizontal"
        android:background="#d4d1d1"
        android:id="@+id/main_radiogroup"
        >
    </RadioGroup>
    </RelativeLayout>
</RelativeLayout>


图片资源我就不给了


当然还需要一个为radiobutton背景准备的xml文件


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item
       android:state_checked="true"
       android:drawable="@drawable/btn_img_two"
       />

    <item
       android:drawable="@drawable/btn_img_one"
        />
</selector>



二,现在准备工作都准备好了,我们开始其他的,轮播图,还需要一个activity和一个adapter


首先是aticvity:


package com.example.com.wechart.Activity;

import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import com.example.com.wechart.Activity.Adpater.ViewPagerAdapter;
import com.example.com.wechart.R;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener
{

   private ViewPager viewPager;
   private RadioGroup radioGroup;
   private List<View> imageview_list=new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        int[] ids={
                R.drawable.inter,
                R.drawable.learning,
                R.drawable.major,
                R.drawable.message
        };
        for (int i=0;i<ids.length;i++)
        {
            ImageView imageview=new ImageView(this);
            imageview.setScaleType(ImageView.ScaleType.CENTER);
            imageview.setImageBitmap(BitmapFactory.decodeResource(getResources(),ids[i]));
            imageview_list.add(imageview);

            RadioButton button=new RadioButton(this);
            button.setButtonDrawable(R.drawable.button_values);
            radioGroup.addView(button);
        }
        viewPager.addOnPageChangeListener(this);
        viewPager.setAdapter(new ViewPagerAdapter(imageview_list));
        radioGroup.check(0);
        handle.sendEmptyMessageDelayed(1,3000);
    }

    //通过id寻找到控件

    private void init()
    {
        viewPager= (ViewPager) findViewById(R.id.main_relativelayout);
        radioGroup= (RadioGroup) findViewById(R.id.main_radiogroup);
    }

    //

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
    {
    }

    @Override
    public void onPageSelected(int position)
    {
       radioGroup.clearCheck();
       radioGroup.check(position-1);
    }

    @Override
    public void onPageScrollStateChanged(int state)
    {
    }
 
    Handler handle=new Handler()
    {
        private int Index;

        @Override
        public void handleMessage(Message msg)
        {
            super.handleMessage(msg);
            handle.sendEmptyMessageDelayed(1,3000);
            if (Index<imageview_list.size()-1)
            {
                Index++;
            }
            else
            {
                Index=0;
            }
            viewPager.setCurrentItem(Index);
        }
    };
}



然后是adapter:


package com.example.com.wechart.Activity.Adpater;

import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;

import java.util.List;

/**
 * Created by 12697 on 2017/3/11.
 */

public class ViewPagerAdapter extends PagerAdapter
{
    private List<View> imageview_list;

    public ViewPagerAdapter(List<View> imageview_list)
    {
         this.imageview_list=imageview_list;
    }

    @Override
    public int getCount()
    {
        return imageview_list==null?0:imageview_list.size();
    }

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

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        View view=imageview_list.get(position);
        container.addView(view,0);
        return  view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object)
    {
      View view=imageview_list.get(position);
      container.removeView(view);

    }
}



以后写Viewpager时一定要记住,必须重写destroyitem;特别是在与fragment这些一起连用的时候,否则,容易出现卡顿等现象



ok,基本上一个轮播图就这样写完了,有兴趣的可以去学习一下无限轮播,或者自定义轮播图以及radiogroup的一些算法机制









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值