效果图:
轮播图的大家肯定都已经很了解了,下面呢,直接贴一下我实现的代码:
布局文件:
<com.zhy.autolayout.AutoRelativeLayout
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="350px"
android:focusable="true"
android:focusableInTouchMode="true">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v4.view.ViewPager>
<com.zhy.autolayout.AutoRelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="10px">
<!-- 存放代表viewpager播到第几张的小圆点 -->
<com.zhy.autolayout.AutoLinearLayout
android:id="@+id/ll_tag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginRight="30px"
android:gravity="center_vertical"
android:orientation="horizontal"></com.zhy.autolayout.AutoLinearLayout>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@id/ll_tag"
android:paddingLeft="20px"
android:singleLine="true"
android:textColor="@color/colorWhiteText"
android:textSize="14sp" />
</com.zhy.autolayout.AutoRelativeLayout>
</com.zhy.autolayout.AutoRelativeLayout>
下面试java代码:
//控制图片是否开始轮播的开关,默认关的
private boolean isStart = false;
//统计下载了几张图片
int mPicNumber = 0;
//统计当前viewpager轮播到第几页
int p = 0;
//准备好三张网络图片的地址
private List<String> imageUrl;
private List<String> titles;
//存储小圆点的一维数组
private ImageView tag[];
//开始图片轮播的线程
private MyThread t;
mRl = (AutoRelativeLayout) findViewById(R.id.rl);
mLlTag = (AutoLinearLayout) findViewById(R.id.ll_tag);
mTvTitle = (TextView) findViewById(R.id.tv_title);
mViewpager = (ViewPager) findViewById(R.id.viewpager);
private void setInit() {
NetModelImpl netModel = new NetModelImpl();
Map<String, String> params = new HashMap<>();
params.put("OP", " bannear ");//op 数据
params.put("user_Group_ID", Constants.GROUPID);
params.put("lang", "" + (getActivity().getResources().getConfiguration().locale.getCountry().equals("CN") ? "zh" : "en"));
params.put("APPType", "android");
params.put("PlantType", Constants.ISBIG);
netModel.postNetValue(Constants.ShopMallHandlerURL, params, new NetConnectionBack() {
@Override
public void onSuccess(String response) {
try {
Log.e("TAGresponse=shophome", response + "");
shopHomeBean = new Gson().fromJson(response, ShopHomeBean.class);
if (response != null && shopHomeBean.getErrorCode().equals("200")) {
if (shopHomeBean.getData1().size() > 0) {
mPicNumber = 0;
mHandler.removeCallbacksAndMessages(null);
imageUrl = new ArrayList<>();
titles = new ArrayList<>();
for (int i = 0; i < shopHomeBean.getData1().size(); i++) {
if (!shopHomeBean.getData1().get(i).getImgurl().split("\\|")[0].equals("")) {
String s = shopHomeBean.getData1().get(i).getImgurl().split("\\|")[0];
String a[] = s.split("&");
imageUrl.add(a[0] + "&width=750&height=320");
// titles.add(shopHomeBean.getData1().get(i).getLinkurl());
}
}
init();
} else {
//
mRl.setVisibility(View.GONE);
mViewpager.setVisibility(View.GONE);
}
if (shopHomeBean.getData2().size() > 0) {
TabGridViewAdapter adapter = new TabGridViewAdapter();
mGridTab.setAdapter(adapter);
} else {
mGridTab.setVisibility(View.GONE);
}
}
} catch (JsonSyntaxException e) {
e.printStackTrace();
}
}
@Override
public void onError(String err) {
Log.e("TAGresponse", err);
}
}, getActivity());
}
private void init() {
// mTvTitle.setText(titles.get(0));
mViewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
try {
// TODO Auto-generated method stub
//把当前的页数赋值给P
p = position;
//得到当前图片的索引,如果图片只有三张,那么只有0,1,2这三种情况
int currentIndex = (position % imageUrl.size());
for (int i = 0; i < tag.length; i++) {
if (i == currentIndex) {
// mTvTitle.setText(titles.get(i));
if (getActivity() != null)
tag[i].setImageDrawable(getActivity().getResources().getDrawable(R.drawable.mall_banner_full));
} else {
if (getActivity() != null)
tag[i].setImageDrawable(getActivity().getResources().getDrawable(R.drawable.mall_banner_blank));
}
}
} catch (Resources.NotFoundException e) {
e.printStackTrace();
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
//构造一个存储照片的集合
data = new ArrayList<>();
data.clear();
//从网络上把图片下载下来
for (int i = 0; i < imageUrl.size(); i++) {
getImageFromNet(imageUrl.get(i));
}
}
protected void creatTag() {
tag = new ImageView[imageUrl.size()];
for (int i = 0; i < imageUrl.size(); i++) {
tag[i] = new ImageView(getActivity());
//第一张图片画的小圆点是白点
if (i == 0) {
tag[i].setImageDrawable(getActivity().getResources().getDrawable(R.drawable.mall_banner_full));
} else {
//其它的画灰点
tag[i].setImageDrawable(getActivity().getResources().getDrawable(R.drawable.mall_banner_blank));
}
//设置上下左右的间隔
tag[i].setPadding(10, 10, 10, 10);
LinearLayout.LayoutParams ls = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, Gravity.CENTER_VERTICAL);
ls.setMargins(0, 0, 0, 8);
tag[i].setLayoutParams(ls);
//添加到viewpager底部的线性布局里面
mLlTag.addView(tag[i]);
}
}
private void getImageFromNet(final String imagePath) {
try {
mPicNumber++;
Log.i("", "handleMessage: mPicNumber" + mPicNumber);
ImageView iv = new ImageView(getActivity());
iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
GlideUtils.loadPic(getActivity(),
imagePath,
iv);
//把图片添加到集合里
data.add(iv);
//当接收到第三张图片的时候,设置适配器,
if (mPicNumber == imageUrl.size()) {
mViewpager.setAdapter(new ShopPaAdapter(data, getActivity(), shopHomeBean.getData1()));
//创建小圆点
creatTag();
if (imageUrl.size() > 1) {
//把开关打开
isStart = true;
t = new MyThread();
//启动轮播图片线程
t.start();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onStop() {
super.onStop();
mHandler.removeCallbacksAndMessages(null);
Log.e("TAGresponse", "onStop");
}
class MyThread extends Thread {
@Override
public void run() {
super.run();
while (isStart) {
Message message = new Message();
message.what = 1;
message.obj = p;
mHandler.sendMessage(message);
try {
//睡眠3秒,在isStart为真的情况下,一直每隔三秒循环
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
p++;
}
}
}
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
//接受到的线程发过来的p数字
int page = (Integer) msg.obj;
mViewpager.setCurrentItem(page);
break;
}
}
};
ViewPager的adapter:
public class ShopPaAdapter extends PagerAdapter {
private List<ImageView> data;
Context context;
private List<ShopHomeBean.Data1> zxd;
public ShopPaAdapter(List<ImageView> data, Context context, List<ShopHomeBean.Data1> zxd) {
this.data = data;
this.context = context;
this.zxd = zxd;
}
@Override
public int getCount() {
//返回一个无穷大的值,
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//注意,这里什么也不做!!!
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
ImageView image = data.get(position % data.size());
//如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。
ViewParent vp = image.getParent();
if (vp != null) {
ViewGroup vg = (ViewGroup) vp;
vg.removeView(image);
}
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// if (zxd.get(position % data.size()).getLinkurl().equals("3")) {
context.startActivity(new Intent(context, ShopGoodsWebActivity.class)
// .putExtra(ShopGoodsWebActivity.WEB_TITLE, zxd.get(position % data.size()).getTitle())
// .putExtra(ShopGoodsWebActivity.AD_ARTICLE_ID, zxd.get(position % data.size()).getID())
.putExtra(ShopGoodsWebActivity.GOODS_SHOP_URL, zxd.get(position % data.size()).getLinkurl())
);
// } else {
// context.startActivity(new Intent(context, ContentActivity.class)
// .putExtra("id", zxd.get(position % data.size()).getID())
// );
// }
Log.e("PaAdapter", "点击图片");
}
});
container.addView(data.get(position % data.size()));
return data.get(position % data.size());
}
}
实体类:
public class ShopHomeBean {
private String errorCode;
private List<Data1> data1;
private List<Data2> data2;
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public String getErrorCode() {
return errorCode;
}
public void setData1(List<Data1> data1) {
this.data1 = data1;
}
public List<Data1> getData1() {
return data1;
}
public void setData2(List<Data2> data2) {
this.data2 = data2;
}
public List<Data2> getData2() {
return data2;
}
public static class Data1 {
private String ID;
private String imgurl;
private String linkurl;
public void setID(String ID) {
this.ID = ID;
}
public String getID() {
return ID;
}
public void setImgurl(String imgurl) {
this.imgurl = imgurl;
}
public String getImgurl() {
return imgurl;
}
public void setLinkurl(String linkurl) {
this.linkurl = linkurl;
}
public String getLinkurl() {
return linkurl;
}
}
public class Data2 {
private String ID;
private String parent_ID;
private String Channel_Name;
private String Channel_Name_mobile;
private String Channel_Name_English;
private String Channel_icon;
private String URL_GoTo;
public void setID(String ID) {
this.ID = ID;
}
public String getID() {
return ID;
}
public void setParent_ID(String parent_ID) {
this.parent_ID = parent_ID;
}
public String getParent_ID() {
return parent_ID;
}
public void setChannel_Name(String Channel_Name) {
this.Channel_Name = Channel_Name;
}
public String getChannel_Name() {
return Channel_Name;
}
public void setChannel_Name_mobile(String Channel_Name_mobile) {
this.Channel_Name_mobile = Channel_Name_mobile;
}
public String getChannel_Name_mobile() {
return Channel_Name_mobile;
}
public void setChannel_Name_English(String Channel_Name_English) {
this.Channel_Name_English = Channel_Name_English;
}
public String getChannel_Name_English() {
return Channel_Name_English;
}
public void setChannel_icon(String Channel_icon) {
this.Channel_icon = Channel_icon;
}
public String getChannel_icon() {
return Channel_icon;
}
public void setURL_GoTo(String URL_GoTo) {
this.URL_GoTo = URL_GoTo;
}
public String getURL_GoTo() {
return URL_GoTo;
}
}
}