一般传统的安卓应用都会用到轮播,主要用于广告、商品图片展示等等,可以说占了主页面一个挺重要的部分。
我用的开发工具是android studio+Eclipse,基于ssm框架。
这里用到了一个banner开源插件,开源地址是:
https://github.com/youth5201314/banner
首先第一步,找到android studio项目中Gradle Scripts下的build.gradle,然后把依赖添加到dependencies标签内。
第二步,在xml文件里面引用
<com.youth.banner.Banner
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/banner_home_header"
android:layout_width="match_parent"
android:layout_height="180dp" />
简单写一个数据库
接着,去eclipse服务端写查询方法
数据库查询语句
<!-- 查询所有轮播 -->
<select id="selectAllBanner" resultMap="BaseResultMap">
select banner.*
from banner
where is_show =1 and is_valid =1
</select>
实现接口类和dao就不写了,和普通的查询一样
控制器:
package com.mm.web;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mm.po.Banner;
import com.mm.service.IAppMainPageService;
import com.mm.util.AppSeting;
import com.mm.util.Tools;
@Controller
@RequestMapping("/app/mainPage")
public class AppMainPageController {
//处理json
private Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
//注入service
@Autowired
IAppMainPageService appMainPageService;
/**
* App查询轮播
*/
@RequestMapping(value="/getBannerInfo")
@ResponseBody
public Object getBannerInfo() {
List<Banner> banners=this.appMainPageService.selectBannerAll();
return gson.toJson(banners);
}
/**
* app获取
*/
@RequestMapping(value="/getBannerPicture")
public ResponseEntity<byte[]> getBannerPicture(String pictureName) throws IOException{
if(Tools.isNotNull(pictureName)) {
//文件
File file=new File(AppSeting.UPLOAD_MAIN_BANNER_DIR,pictureName);
if(file.exists()) {//判断文件是否存在
//设置header
HttpHeaders headers=new HttpHeaders();
//设置为图片类型
headers.setContentType(MediaType.IMAGE_JPEG);
headers.setContentDispositionFormData("attachment", pictureName);
//返回文件相关数据
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers,HttpStatus.CREATED);
}
}
return null;
}
}
定义了一个轮播图片存放路径的class:AppSeting
package com.mm.util;
public class AppSeting {
/**
* 轮播图片存放路径
*/
public static final String UPLOAD_MAIN_BANNER_DIR = "E:\\mycode\\eclipse\\CargoService\\src\\main\\webapp\\images\\mainBanner";
public static final String UPLOAD_MEMBER_PHOTO_DIR = "E:\\mycode\\eclipse\\CargoService\\src\\main\\webapp\\images\\memberPhone";
public static final String UPLOAD_ROOM_TYPE_PIC_DIR = "E:\\mycode\\eclipse\\CargoService\\src\\main\\webapp\\images\\roomTypePic";
}
具体路径改成自己的本地路径
回到android studio,初始化界面,加载轮播
//初始化页面
private void initView() {
//显示轮播
//获取服务端轮播数据
String url= ServiceUrls.getMainPageMethodUrl("getBannerInfo");
//发送请求
OkHttpTool.httpPost(url, null, new OkHttpTool.ResponseCallback() {
@Override
public void onResponse(final boolean isSuccess, final int responseCode, final String response, Exception exception) {
mActivityContext.runOnUiThread(new Runnable() {
@Override
public void run() {
if (isSuccess && responseCode==200 && Tools.isNotNull(response)){
Type type=new TypeToken<List<BannerBean>>(){}.getType();
List<BannerBean> bannerList=gson.fromJson(response,type);
//显示轮播
bannerHeader.setAdapter(new HomeBannerAdapter(bannerList,mActivityContext))
.setIndicator(new CircleIndicator(mActivityContext))//设置圆形指示器
.setIndicatorSelectedColorRes(R.color.dodgerblue)//设置被选中指示器的颜色
.isAutoLoop(true)//自动开启轮播
//.setDelayTime(10*1000)//轮播间隔
.setOnBannerListener(new OnBannerListener() {
@Override
public void OnBannerClick(Object data, int position) {
int bannerId=((BannerBean)data).getBannerId();
Toast.makeText(mActivityContext,String.valueOf(bannerId),Toast.LENGTH_SHORT).show();
}
});
}else{
Toast.makeText(mActivityContext,"轮播加载失败",Toast.LENGTH_LONG).show();
}
}
});
}
});
}
模拟器运行效果