Android简单轮播

一般传统的安卓应用都会用到轮播,主要用于广告、商品图片展示等等,可以说占了主页面一个挺重要的部分。

我用的开发工具是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();
                        }
                    }
                });
            }
        });
    }

模拟器运行效果

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值