自定义开发一个android轮播图控件BannerImg

app开发中经常会用到轮播图控件,这里干脆自定义开发一个常用的组件(主要使用ViewPager+ImageLoader),以后每次调用时,用起来方便:)

先看下效果图:

自定义开发一个android轮播图控件BannerImg_第1张图片

自定义的控件为BannerImg类,首先看布局文件

bannerimg.xml



    

    

    

然后是类文件

BannerImg.java

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * Created by Administrator on 2015-12-30.
 */
public class BannerImg extends FrameLayout {
    private final static boolean isAutoPlay = true;
    private List imageUris;
    private List imageViewsList;
    private List dotViewsList;
    private LinearLayout mLinearLayout;
    private ViewPager mViewPager;
    private int currentItem  = 0;
    private ScheduledExecutorService scheduledExecutorService;
    @SuppressLint("HandlerLeak")
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            mViewPager.setCurrentItem(currentItem);
        }
    };
    //使用ImageLoader加载网络图片
    ImageLoader imageLoader = ImageLoader.getInstance();
    DisplayImageOptions options = new DisplayImageOptions.Builder()
            .showImageForEmptyUri(R.mipmap.image_for_empty_url)
    .showImageOnFail(R.mipmap.image_for_empty_url)
    .resetViewBeforeLoading(true)
    .cacheOnDisk(true)
    .imageScaleType(ImageScaleType.EXACTLY)
    .bitmapConfig(Bitmap.Config.RGB_565)
    .considerExifParams(true)
    .displayer(new FadeInBitmapDisplayer(300)).build();
    public BannerImg(Context context) {
        this(context,null);
    }
    public BannerImg(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
    public BannerImg(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
        initUI(context);
        if(!(imageUris.size()<=0))
        {
            setImageUris(imageUris);
        }
        if(isAutoPlay){
            startPlay();
        }

    }
    private void initUI(Context context){
        imageViewsList = new ArrayList();
        dotViewsList = new ArrayList();
        imageUris=new ArrayList();
        LayoutInflater.from(context).inflate(R.layout.bannerimg, this, true);
        mLinearLayout=(LinearLayout)findViewById(R.id.dotsImg);
        mViewPager = (ViewPager) findViewById(R.id.imagePager);
        ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
        config.threadPriority(Thread.NORM_PRIORITY - 2);
        config.denyCacheImageMultipleSizesInMemory();
        config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
        config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
        config.tasksProcessingOrder(QueueProcessingType.LIFO);
        config.writeDebugLogs(); // Remove for release app
        // Initialize ImageLoader with configuration.
        imageLoader.init(config.build());
    }
    public void setImageUris(List imageuris)
    {
        for(int i=0;i                    //如果滑到最后,就从头开始
                    if (mViewPager.getCurrentItem() == mViewPager.getAdapter().getCount() - 1 && !isAutoPlay) {
                        mViewPager.setCurrentItem(0);
                    }
                    //如果滑到头就从尾开始
                    else if (mViewPager.getCurrentItem() == 0 && !isAutoPlay) {
                        mViewPager.setCurrentItem(mViewPager.getAdapter().getCount() - 1);
                    }
                    break;
            }
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onPageSelected(int pos) {
            // TODO Auto-generated method stub
            setImageBackground(pos);
        }
    }



    private class BannerTask implements Runnable{
        @Override
        public void run() {
            // TODO Auto-generated method stub
            synchronized (mViewPager) {
                currentItem = (currentItem+1)%imageViewsList.size();
                handler.obtainMessage().sendToTarget();
            }
        }
    }
    
}

上面 控件设计好了,就看如何使用了,我们放到MainActivity中看效果,

activity_main.xml



    



然后看MainActivity.java调用代码:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        BannerImg bannerImg=(BannerImg)findViewById(R.id.mainBanner);
        List imgs=new ArrayList();
        imgs.add(0,"http://www.tot.name/app/banner/1.jpg");
        imgs.add(1,"http://www.tot.name/app/banner/2.jpg");
        imgs.add(2,"http://www.tot.name/app/banner/3.jpg");
        imgs.add(3,"http://www.tot.name/app/banner/4.jpg");
        imgs.add(4,"http://www.tot.name/app/banner/5.jpg");
        bannerImg.setImageUris(imgs);
    }


看看,是不是比较简单。这样就完成了。

你可能感兴趣的:(java)