純粹為了保持**風格的一致性,也可以用xml布局來實現。
private view createbannerview()
public class banner
public string getname()
public string getimgurl()
public string gettargeturl()
}
沒有實現banner的左右迴圈效果,感覺意義不大。
public class bannerviewadapter extends pageradapter
@override
public int getcount()
@override
public boolean isviewfromobject(view view, object object)
/*** @param container
* @param position
* @return 對position進行求模操作
* 因為當使用者向左滑時position可能出現負值,所以必須進行處理
*/@override
public object instantiateitem(viewgroup container, int position)
imageview view = new imageview(mcontext);
view.setscaletype(imageview.scaletype.fit_xy);
picasso.with(mcontext).load(mbanners.get(position).getimgurl()).placeholder(r.drawable.default_banner).error(r.drawable.default_banner).transform(new picassotransformation()).into(view);
view.settag(position);
final int index = position;
view.setonclicklistener(new view.onclicklistener() else
}});
// 如果view已經在之前新增到了乙個父元件,則必須先remove,否則會丟擲illegalstateexception。
viewparent viewparent = view.getparent();
if (viewparent != null)
container.addview(view);
return view;
}/**
* 由於我們在instantiateitem()方法中已經處理了remove的邏輯,
* 因此這裡並不需要處理。實際上,實驗表明這裡如果加上了remove的呼叫,
* 則會出現viewpager的內容為空的情況。
** @param container
* @param position
* @param object
*/@override
public void destroyitem(viewgroup container, int position, object object)
public void setbanner(arraylistbanners)
}
由於使用了picasso非同步載入,所以需要實現transformation介面。
public class picassotransformation implements transformation
@override
public string key()
}
自定義帶圓點指示器的banner控制項,實現自動輪播、拖拽暫停、手動滑動效果。
public class bannerview extends relativelayout implements viewpager.onpagechangelistener else
break;
default:
break;}}
};public bannerview(context context)
public void setbannerviewadapter(bannerviewadapter bannerviewadapter)
private void initview()
refreshdots(0);
}/**
* 自動輪播,5s後第一次執行,週期是5s
*/private void bindcarouseltask()
message.arg1 = mautocurrindex + 1;
mhandler.sendmessage(message);}}
}, 5000, 5000);
}@override
public void onpagescrolled(int position, float positionoffset, int positionoffsetpixels)
@override
public void onpageselected(int position)
// 設定當前的index
mautocurrindex = position;
}@override
public void onpagescrollstatechanged(int state)
}private void refreshdots(int positionindata)
mdots.get(positionindata).setdotcolor(constants.selected_dot_color);
}/**
* 指示當前viewpager處於哪個頁面
*/private class dot extends view
@override
protected void ondraw(canvas canvas)
/*** 將dot的寬度和高度定死
*/@override
protected void onmeasure(int widthmeasurespec, int heightmeasurespec)
/*** 修改dot的顏色, 並且讓整個dot重繪
*/public void setdotcolor(int color)
}}
public void setbannerviewdatas(arraylistbanners)
banner輪播的簡單實現
首先banner輪播讓我們避免了自己手寫輪播圖的需求是繁瑣的 因為banner已經寫好了 我們只要將我們想要輪播的存到集合中,在將集合放入banner中就好了。1.使用前先新增依賴 compile com.youth.banner banner 1.1.5 compile com.github.bu...
修改系統banner
如上圖,登陸系統後展示出來的類似歡迎資訊的我們稱之為登陸banner,兩個紅框部分的資訊就是banner。如上圖,其實是分為兩部分的,第一部分稱為靜態banner,第二部分稱為動態banner,為什麼叫靜態和動態呢?往下看 第一部分實際展示的是系統 etc motd中的內容 第二部分實際展示的是指令...
banner無限輪播
第一步 導依賴 implementation com.youth.banner banner 1.4.9 implementation com.nostra13.universalimageloader universal image loader 1.9.5 第二步 布局 override pub...