简单的图片轮播 加小圆点

先说一下思路,使用ViewPager加 LinearLayout  布局 共同实现,

先看布局

    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:id="@+id/support">
        
    </android.support.v4.view.ViewPager>
    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">
        
    </LinearLayout>

再 看  配置图片设配器 

//设配器
class MyAapter extends PagerAdapter{
private Context context;
private String[] path;//是一个数组 网络图片的URL
private BitmapUtils bu;//用于绘制一个位图给图片赋值
//构造传参
public MyAapter(Context context,String[] path){
    this.context=context;
    this.path=path;
    bu = new BitmapUtils(context);
}

    @Override
public void destroyItem(ViewGroup container, int position, Object object) {
    // TODO Auto-generated method stub
    container.removeView((View) object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    // TODO Auto-generated method stub
    ImageView imv=new ImageView(context);
    int i=position%path.length;
    

    bu.display(imv, path[i]);
    container.addView(imv);
    return imv;
}

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return Integer.MAX_VALUE;//设置最大值
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        // TODO Auto-generated method stub
        return arg0==arg1;//必须写 否则报错的会
    }
    
}

这里是给小圆点配置图片   (在res目录下创建一个drawable文件夹 放配置信息)

设置默认  与选择 状态  的选择

<item android:state_enabled="true" android:drawable="@drawable/shapetrue"></item>
    <item android:state_enabled="false" android:drawable="@drawable/shapefalse"></item>

在设置@drawable/shapetrue与@drawable/shapefalse的图片信息比如

@drawable/shapetrue为

<shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="oval">
    <size android:width="10dp" android:height="10dp"/>
    <solid android:color="#ff0"/>//另一个 换个颜色即可

</shape>

扫描二维码关注公众号,回复: 2756425 查看本文章

小圆点的方法

public void dian(){
        //用循环保证与图片索引一致
        for(int i=0;i<path.length;i++){
            //创建小圆点资源文件res/drawable
            ImageView im=new ImageView(this);
            im.setBackgroundResource(R.drawable.colorim);
            //大小
            LayoutParams l=new LayoutParams(LayoutParams.WRAP_CONTENT, -2);
        l.rightMargin=15;
        im.setLayoutParams(l);
        
        if(i==0){
            im.setEnabled(false);
        }
        //把图片视图加入布局
        ll.addView(im);
        }
    }

重要的  一部  滑动事件

 //获取控件
        support=(ViewPager)findViewById(R.id.support);
        ll=(LinearLayout)findViewById(R.id.ll);
        
        //加载设配器
        support.setAdapter(new MyAapter(this,path));

//发给Handler 消息池处理

  hand.sendEmptyMessageDelayed(0, 2000);

        //滑动事件
        support.setOnPageChangeListener(new OnPageChangeListener() {
            
            @Override
            public void onPageSelected(int arg0) {
                // 取出正确的索引
                int in=arg0%path.length;
                //取出控件
                ImageView ima=(ImageView)ll.getChildAt(in);
                ima.setEnabled(false);
                ImageView laseim=(ImageView)ll.getChildAt(index);
                laseim.setEnabled(true);
                index=in;
                
            }
            
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub
                
            }
            
            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub
                
            }
        });
        dian();//调用的小圆点方法

Handler 处理详情

private Handler hand=new Handler(){
       public void handleMessage(android.os.Message msg) {
         //获得当前viewPager位置
            int item=support.getCurrentItem();
            item+=1;
           support.setCurrentItem(item);

         hand.sendEmptyMessageDelayed(0, 2000);//再次发送  调用  实现无限轮播
       };
 };

猜你喜欢

转载自blog.csdn.net/fanaw/article/details/51577233