實現輪播圖的廣告位
阿新 • • 發佈:2019-01-09
效果圖:
輪播圖的大家肯定都已經很瞭解了,下面呢,直接貼一下我實現的程式碼:
佈局檔案:
<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;
}
}
}