Android動的ローディングラウンドマップBannerView

18216 ワード

輪播図は各appの中で1つの飾りの役を演じて、独立して3つのappをした後にすべてこの需要があって、だから私はそれを単独で抽出することにしました.あとはcopyだけで、必要に応じて変更すればいいです.Android动态加载轮播图BannerView_第1张图片
/**
 *        
 *@author jiangrongtao
 *
 *csdn:http://blog.csdn.net/jiang_rong_tao
 *
 *github:https://github.com/jiangrongtao/jiangrongtao.github.io
 *
 * created at 2016/6/3 9:14
*/


public class BannerView {
    private View bannerView;
    private Context mContext;
    private Map maps;
    private FragmentManager manager;
    private List mList;
    private MyChildViewPager bannerPager;
    private ImageView defImage;//      
    public  static boolean LOAD_FINISH=false;//     banner
    private LinearLayout llDots;//         
    public  boolean isRoll = false;//    
    private List dotList = new ArrayList();//     

    private static final String TAG = "BannerView";
    public BannerView(Context context,Map maps,FragmentManager manager){
        this.mContext=context;
        this.maps=maps;
        this.manager=manager;
        mList=new ArrayList();
    }
    protected Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what){
                case 1:
                    final List data = (List) msg.obj;
                    setBannerInfo(data);
                    break;
                case 2:
                    LOAD_FINISH=false;
                    defImage.setVisibility(View.VISIBLE);
                    break;
                case 3:
                    if (mList.size() > 0) {
                        bannerPager.setCurrentItem((bannerPager.getCurrentItem() + 1) % mList.size());
                    } else {
                        isRoll = false;
                    }
                    break;
            }
        }
    };

    /**
     *   banner  
     * @param data
     */
    private void setBannerInfo(final List data) {
        mList.clear();
        for (int i = 0; i < data.size(); i++) {
            final int j = i;
            final ImageView imageView = new ImageView(mContext);
            BannerInfo bannerInfo = data.get(i);
            APIImageLoader.displayImage(mContext,bannerInfo.getUrl(), R.drawable.banner_fial,R.drawable.banner_fial,imageView);
            imageView.setOnClickListener(new View.OnClickListener() {
             @Override
                public void onClick(View v) {
                    String hrefUrl = data.get(j).getHrefUrl();
                    if (!TextUtils.isEmpty(hrefUrl)) {
                        Intent intent = new Intent(mContext, AppDetailActivity.class);
                        intent.putExtra("hrefUrl", hrefUrl);
                        mContext.startActivity(intent);
                    }
                }
            });
            Fragment fragment = new Fragment() {
                @Override
                public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                         Bundle savedInstanceState) {
                    return imageView;
                }
            };
            mList.add(fragment);
        }
        if(mList.size()>0){
            defImage.setVisibility(View.GONE);
            bannerPager.setAdapter(new BannerAdapter(manager, mList));
            initDot();
            bannerPager.setCurrentItem(0);
            LOAD_FINISH=true;
        }else{
            LOAD_FINISH=false;
            defImage.setVisibility(View.VISIBLE);
        }
    }

    public View getBannerView() {
        bannerView=View.inflate(mContext, R.layout.banner_layout,null);
        bannerPager= (MyChildViewPager) bannerView.findViewById(R.id.banner_pager);
        defImage = (ImageView)bannerView.findViewById(R.id.iv_default_page);
        llDots=(LinearLayout)bannerView.findViewById(R.id.ll_dots);
        initBannersData();
        return bannerView;
    }
    /*
    *       
    * */
    public void setBannerCycle(long loopTime){

        if(LOAD_FINISH){
            if(null!=bannerPager){
                isRoll=true;
                startLooper(loopTime);
                bannerPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                    @Override
                    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                    }

                    @Override
                    public void onPageSelected(int position) {
                        switchDot(position);
                    }

                    @Override
                    public void onPageScrollStateChanged(int state) {

                    }
                });
            }
        }
    }

    /**
     *     
     * @param loopTime       
     */
    private void startLooper(final long loopTime) {

        new Thread() {
            public void run() {
                while (isRoll) {
                   handler.sendEmptyMessageDelayed(3,loopTime);
                }
            };
        }.start();
    }

    //    banner  
    private void initBannersData() {
        maps.clear();
        RequestManager.getInstance(mContext).sendPost(APIConfig.GET_BANNERS, maps, BannerRes.class, new Callback() {
            @Override
            public BannerRes parseNetworkResponse(Response response) throws Exception {
                return  GsonUtils.object(response.body().string(),BannerRes.class);
            }

            @Override
            public void onError(Call call, Exception e) {

            }

            @Override
            public void onResponse(BannerRes response) {

                if(APIResCode.SUCCESS.equals(response.getResCode())){
                    List data = response.getData();
                    if (data!=null&&data.size()>0){
                        handler.sendMessage(handler.obtainMessage(1, data));
                    }else{
                        handler.sendEmptyMessage(2);
                    }
                }
            }
        });
    }
    /**
     *       
     */
    private void initDot() {
        llDots.removeAllViews();
        dotList.clear();
        for (int i = 0; i < mList.size(); i++) {
            View view = new View(mContext);
            //          
            view.setBackgroundResource(i == 0?R.drawable.dot_sel:R.drawable.dot_nor);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(8, 8);
            params.setMargins(0, 0, 12, 0);
            llDots.addView(view, params);
            dotList.add(view);
        }
    }
    /**
     *     
     */
    private void switchDot(int position) {
        for (int i = 0; i < dotList.size(); i++) {
            dotList.get(i).setBackgroundResource(i == position?R.drawable.dot_sel:R.drawable.dot_nor);
        }
    }
}

マップアダプタ:
public class BannerAdapter extends FragmentPagerAdapter{
    List list ;
    public BannerAdapter(FragmentManager fm, List list) {
        super(fm);
        this.list = list ;
    }
    @Override
    public  Fragment getItem(int index) {
        return list.get(index%list.size());
    }
    @Override
    public int getCount() {
        return list.size();
    }
}

レイアウトファイル:
"1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center" >
    <com.jianzhilaila.money.ui.view.myviewpager.MyChildViewPager
        android:id="@+id/banner_pager"
        android:layout_width="match_parent"
        android:layout_height="200dp">
    com.jianzhilaila.money.ui.view.myviewpager.MyChildViewPager>
    "@+id/iv_default_page"
        android:layout_width="match_parent"
        android:layout_height="208dp"
        android:background="@drawable/banner_fial" />
    "@+id/ll_dots"
    android:layout_width="match_parent"
    android:layout_height="8dp"
    android:layout_alignParentBottom="true"
    android:gravity="center"
    android:layout_gravity="bottom"
    android:layout_marginBottom="10dp"
    android:orientation="horizontal" />

具体的な使い方
//  banner
 BannerView bannerView = new BannerView(context, maps,   getChildFragmentManager());
        View banner = bannerView.getBannerView();
        mLinearLayout.addView(banner,0);
        bannerView.setBannerCycle(1500);
 onDestroyView() onDestroy()     :**isRoll=false;** ,      。
mLinearLayout          。getChildFragmentManager     Viewpager      。MyChildViewPager                      。RequestManager APIImageLoader                   ,       http://blog.csdn.net/jiang_rong_tao/article/details/51516977 。

注意:上のコードには改善すべき点がたくさんあります.バグがあれば、自分で修復して、改善したコードを共有することができます.