中文版 | English
XBanner
This is a banner suppoted gifs and images.无限轮播的广告控件,提供gif支持。
A banner for showing Ads with the Viewpager and supports automatic play in an infinite loop.With XBanner you can customize the style of this banner.XBanner also provides gif supprot,and we use the 3rd party dependency to load gifs for better perfoemance.
dependencies{
compile 'com.abby.app:xbanner:1.5.7' //the latest version
//Thans koral-- for android-gif-drawable,it's a good solution for showing gif images.It is high performance.
//Instead of using ImageView+Glide,we use gif-drawable for better performance
//The dependency 'pl.droidsonroids.gif:android-gif-drawable:1.2.8' was added in this project.
}
A simple way to use XBanner is like below. releaseBanner() must be called when the view is destroying
@Override
public void onCreate(Bundle savedInstanceState) {
int[] res={R.drawable.pic1,R.drawable.pic2,R.drawable.pic3,R.drawable.pic4,R.drawable.pic5};
xbanner.isAutoPlay(false)
.setDelay(3000)
.setImageRes(res)
.start();
}
@Override
public void onDestroy(){
super.onDestroy();
xbanner.releaseBanner(); // releaseBanner() must be called when the view is destroying
}
@Override
public void onCreate(Bundle savedInstanceState) {
int[] res={R.drawable.pic1,R.drawable.pic2,R.drawable.pic3,R.drawable.pic4,R.drawable.pic5};
List<String> titles=Arrays.asList("This is the picture 1","This is the picture 2","This is the picture 3","This is the picture 4","This is the picture 5");
xbanner.isAutoPlay(false)
.setBannerTypes(XBanner.NUM_INDICATOR_TITLE)//must set banner type to title type to avoid some logic error
.setDelay(3000)
.setImageRes(res)
.setTitles(titles)// setImageResAndTitles(res,titles) also OK
.start();
}
@Override
public void onDestroy(){
super.onDestroy();
xbanner.releaseBanner();// releaseBanner() must be called when the view is destroying
}
If you want to load images from the url,an ImageLoader will be needed.A simple way to use ImageLoader is like below.
@Override
public void onCreate(Bundle savedInstanceState) {
List<String> imageUrls=new ArrayList<>();
imageUrls.add("http://img2.tgbusdata.cn/v2/thumb/jpg/YzQ0NSw4MzAsNjQwLDQsMywxLC0xLDAscms1MA==/u/olpic.tgbusdata.cn/uploads/allimg/160324/238-160324160031.jpg");
imageUrls.add("http://img2.tgbusdata.cn/v2/thumb/jpg/ZjliZCw4MzAsNjQwLDQsMywxLC0xLDAscms1MA==/u/olpic.tgbusdata.cn/uploads/allimg/160324/238-160324160031-50.jpg");
xbanner.isAutoPlay(false)
.setDelay(3000)
.setImageUrls(imageUrls)
//.asGif() if you want to load gif,call it
.setImageLoader(new AbstractUrlLoader() {
@Override
/**
*the one using Glide,you can customize your ImageLoader
*when loading gifs,a default ImageLoader will be applied,which you don't need to add one
*but if you want to customize your loader,do it
*/
public void loadImages(Context context, String url, ImageView image) {
Glide.with(context)
.load(url)
.into(image);
}
@Override
public void loadGifs(String url, GifImageView gifImageView, ImageView.ScaleType scaleType) {
}
}).start();
}
@Override
public void onDestroy(){
super.onDestroy();
xbanner.releaseBanner();// releaseBanner() must be called when the view is destroying
}
@Override
public void onCreate(Bundle savedInstanceState) {
banner.setImageUrls(gifUrls)
.asGif()
.setLoadingProgressType(XBanner.CIRCLE_PROGRESS) //now you can apply a loading progress view here
.start();
}
@Override
public void onDestroy(){
super.onDestroy();
xbanner.releaseBanner();// releaseBanner() must be called when the view is destroying
}
name | description | params |
---|---|---|
setBannerTypes | set the type of banner,CIRCLEINDICATOR by default | CIRCLE_INDICATOR,CIRCLE_INDICATOR_TITLE,CUBE_INDICATOR,NUM_INDICATOR,NUM_INDICATOR_TITLE |
setIndicatorGravity | set the gravity of indicators,CENTER by default | INDICATOR_START,INDICATOR_CENTER,INDICATOR_END |
setUpIndicatorSize | set up the size of indicators,IN PX,BOTH SELECTED AND UNSELECTED will be set | int indicatorSize |
setUpIndicators | set up the indicator resID | int res_selected,int res_unselected |
setEllipsizeType | set the ellipsizetype of the title text,,END by default | ELLIPSIZE_END,ELLIPSIZE_MARQUEE |
setImageScaleType | set the scale type of the image,this method must be called before setting up the images,FIT_XY by default | ImageView.ScaleType scaleType |
setScroller | set the scroller of the viewpager | the scroller to be applied |
setTitlebgAlpha | set the title background to be alpha | no params |
setImageRes | set the image resource | int[] res |
setImageUrls | set the image urls | List< String > urls |
setTitles | set the titles | List< String > titles |
setImageResAndTitles | set the imageres and titles | int[] res,List< String > titles |
setImageUrlsAndTitles | set the image urls and titles | List< String > urls,List< String > titles |
setPageTransformer | set the transformer for the viewpager | PageTransformer transformer |
setDelay | set the interval of the banner when playing,IN MS | int delay |
isAutoPlay | indicate if the banner is automatically playing | boolean is autoPlay |
setTransformerSpeed | set the transform speed when idle,IN MS | int speed |
setTitleHeight | set the height of title,IN PX | int height |
setBannerPageListener | set the banner listener | BannerPageListener listener |
getViewPager | get the viewPager of the banner | no params |
asGif | indicate the urls are gif urls | no params |
clearGifCache | clear the cache of gifs | no params |
autoDeleteGifCache | automatically delete the cache of gifs when reach the the given size | int sizeInMB |
start | start the banner,must be set to start the banner | no params |
setLoadingProgressType | set a progress view when loading gifs | CIRCLE_PROGRESS or TEXT_PROGRESS |
notifyDataSetChanged | refresh data after recalling setImageUrls and setImageRes | no params |
- if the images do not display,check out your network permission and your image if they are configured correctly
- must set the banner type to TITLE TYPE when we set titles to avoid some logic errors
- setImageScaleType must be called before we set the images
- set an ImageLoader when loading images from url,but if you are loading gifs,you don't really have to
- must call asGif() after you set the Url with setImageUrls method when loading gif,no need to set an ImageLoader if so
- must call releaseBanner() in onDestroy()
- to get a better visaul effect,indicator gravity is set to END when in TITLE mode
- just confirm that your gif is in a correct format when you are downloading gif,or it won't be displayed
- when refreshing data at run time,you should call notifyDataSetChanged() and you should reconfig the bannerPageListener because the listener is base on the position not the image itself,only image supports refresh,gif does not beacuse the cost is huge
- supports API 19 and above
- new method setLoadingProgressType(int type) to apply a progress view when loading gifs,while it needs a long time load gifs.
- optimize the memory consumption and the process of downloading gifs
- suppot data refresh at runtime,by calling notifyDataSetChanged() you can refresh data after you reset the dataset
- remove the icon configurations in AndroidManifest that may cause problems in devices above android O
Copyright 2017 AbbyJM
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.