Android動的ローディングラウンドマップBannerView
18216 ワード
輪播図は各appの中で1つの飾りの役を演じて、独立して3つのappをした後にすべてこの需要があって、だから私はそれを単独で抽出することにしました.あとはcopyだけで、必要に応じて変更すればいいです.
マップアダプタ:
レイアウトファイル:
具体的な使い方
注意:上のコードには改善すべき点がたくさんあります.バグがあれば、自分で修復して、改善したコードを共有することができます.
/**
*
*@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 。
注意:上のコードには改善すべき点がたくさんあります.バグがあれば、自分で修復して、改善したコードを共有することができます.