热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android超级炫酷的轮播图实现

轮播图的实现有很多种方式,早先我在网上看了下别人写的轮播图,感觉都比较的墨守成规,有的还有可能加载不了网络图片。所以我在这里自己重新写了下轮播图,方便日后的项目使用.在下面的代码中

轮播图的实现有很多种方式,早先我在网上看了下别人写的轮播图,感觉都比较的墨守成规,有的还有可能加载不了网络图片。所以我在这里自己重新写了下轮播图 ,方便日后的项目使用.
在下面的代码中,我也用volley封装了网络请求框架,异步加载网络图片,也可以给大家参考,非常实用


效果图:这只是其中的一种效果
);
imageUrls.add("http://img4.imgtn.bdimg.com/it/u=1350614941,725003865&fm=21&gp=0.jpg");
imageUrls.add("http://img1.imgtn.bdimg.com/it/u=3293842903,1040789920&fm=21&gp=0.jpg");
imageUrls.add("http://img4.imgtn.bdimg.com/it/u=1590736614,1368131788&fm=21&gp=0.jpg");

flashView.setImageUris(imageUrls);
/** (wujie)增加代码 usage:需要什么类型falshView直接去找这个类就行在flashView框架中,同时修改View中的flashView注释的那块*/
flashView.setEffect(EffectConstants.CUBE_EFFECT);


// VolleyRequest.newInstance(IpAddressConstants.getAdnertisment("","")).newGsonRequest2(Request.Method.POST,IpAddressConstants.ADVERTISMENT_URL, Advertisment.class,
// new Response.Listener() {
// @Override
// public void onResponse(Advertisment dvertisment) {
// /**在此处将服务器返回的轮播图地址一个一个放入imageUrls中*/
// flashView.setImageUris(imageUrls);
// /** (wujie)增加代码 usage:需要什么类型falshView直接去找这个类就行在flashView框架中,同时修改View中的flashView注释的那块*/
// flashView.setEffect(EffectConstants.CUBE_EFFECT);
// }
// }, new Response.ErrorListener() {
// @Override
// public void onErrorResponse(VolleyError volleyError) {
//
// }
// });
}

@Override
public void onClick(View view) {

}
}


MainActivity继承的BaseActivity:

package com.wujie.advertisment.activity;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.widget.Toast;

/**
*

* Company:
* Author : wujie
* Time : 2016/11
* Usage : 所有自定义activity的父类
* desc :
* other :
*

*/


public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener{

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
initView();
initData();
initListener();
}
/**
* 初始化控件
*/

protected abstract void initView();

/**
* 设置监听
*/

protected abstract void initListener();

/**
* 初始化数据
*/

protected abstract void initData();

/**
* 吐司
*/

public void showShortToast(String toast) {
Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
}
}

那么下面我就来封装Volley请求网络数据框架,封装好了之后,调用在MainActivity中有体现。
首先,VolleyRequest类如下:

package com.wujie.advertisment.volley;

import android.content.Context;
import android.util.Log;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;

import java.util.HashMap;
import java.util.Map;

/**
* 请求类
*/

public class VolleyRequest {
private static RequestQueue mRequestQueue;
private Map mMap=new HashMap<>();
private VolleyRequest() {
}
private VolleyRequest(Map mMap) {

this.mMap=mMap;
}

/**
* @param context ApplicationContext
*/

public static void buildRequestQueue(Context context) {
mRequestQueue = Volley.newRequestQueue(context);
//... do something
}

/** (WangShuJie)增加代码 usage:非带参数*/
public static VolleyRequest newInstance() {
if (mRequestQueue == null) {
throw new NullPointerException("Call buildRequestQueue method first.");
}
//...
return new VolleyRequest();
}

/** (WangShuJie)增加代码 usage:带参数*/
public static VolleyRequest newInstance(Map mMap) {
if (mRequestQueue == null) {
throw new NullPointerException("Call buildRequestQueue method first.");
}
//...
Log.i("mtag","newInstance==========="+mMap.get("goodsname"));
return new VolleyRequest(mMap);
}

/**
* @param url
* @param clazz
* @param listener
* @param errorListener
*带参
* @return
*/

public GsonRequest newGsonRequest2(int method, String url, Class clazz, Response.Listener listener,
Response.ErrorListener errorListener) {
GsonRequest request = new GsonRequest(method,url, clazz, listener, errorListener){
@Override
protected Map getParams() {
Log.i("mtag","getParams==========="+mMap.get("goodsname"));
return mMap;
}
};

mRequestQueue.add(request);
return request;
}

/** (wujie)增加代码 usage:不带参的*/
public GsonRequest newGsonRequest(String url, Class clazz, Response.Listener listener,
Response.ErrorListener errorListener) {
GsonRequest request = new GsonRequest(url, clazz, listener, errorListener);
mRequestQueue.add(request);
return request;
}
}

GsonRequest类:

package com.wujie.advertisment.volley;

import android.util.Log;

import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.io.UnsupportedEncodingException;



public class GsonRequest extends Request {

private final Listener mListener;

private static Gson mGson = new Gson();

private Class mClass;
private TypeToken mTypeToken;

public GsonRequest(int method, String url, Class clazz, Listener listener,
ErrorListener errorListener) {
super(method, url, errorListener);
mClass = clazz;
mListener = listener;
}

public GsonRequest(int method, String url, TypeToken typeToken, Listener listener,
ErrorListener errorListener) {
super(method, url, errorListener);
mTypeToken = typeToken;
mListener = listener;
}

public GsonRequest(String url, Class clazz, Listener listener, ErrorListener errorListener) {
this(Method.GET, url, clazz, listener, errorListener);
}

public GsonRequest(String url, TypeToken typeToken, Listener listener, ErrorListener errorListener) {
super(Method.GET, url, errorListener);
mTypeToken = typeToken;
mListener = listener;
}

@Override
protected Response parseNetworkResponse(NetworkResponse response) {
try {
String jsOnString= new String(response.data,"UTF-8");
Log.i("mtag","响应====="+response.data);
if (mTypeToken == null)
return Response.success(mGson.fromJson(jsonString, mClass),
HttpHeaderParser.parseCacheHeaders(response));
else
return (Response) Response.success(mGson.fromJson(jsonString, mTypeToken.getType()),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}

@Override
protected void deliverResponse(T response) {
mListener.onResponse(response);
}

}

管理接口的类:

package com.wujie.advertisment.volley;

import java.util.HashMap;
import java.util.Map;

/**
* author:wujie 2016/11
* usage:
*/


public class IpAddressConstants {
public static String MYIP="http://xxxxx:8080/";

/** ======轮播图====== */
public static final String ADVERTISMENT_URL=MYIP+"AppInterface/advert/indexAdvert";
/** (wujie)增加代码 usage:获取轮播图需要的Map数据*/
public static Map getAdnertisment(String city,String token){
Map mMap=new HashMap<>();
mMap.put("city_name",city);//这个key是你要上传参数的的key,服务器通过这个key来获取客户端穿的参数。
mMap.put("token",token);
return mMap;
}
}

封装好后,我们要将Volley请求加入到队列中(初始化):

package com.wujie.advertisment.application;

import android.app.Application;
import android.content.Context;

import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.wujie.advertisment.volley.VolleyRequest;

/**
*

* Company: xxx
* Author : wujie
* Time : 2016/11
* Usage :
* desc :
* other :
*

*/

public class MyApplication extends Application {

public static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mCOntext= getApplicationContext();
VolleyRequest.buildRequestQueue(this);
initImageLoader();
}

private void initImageLoader() {
/**
* ImageLoader的全局的配置信息
*/

ImageLoaderConfiguration cOnfiguration= new ImageLoaderConfiguration.Builder(this)
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.diskCacheFileCount(100)
.memoryCacheSize(2 * 1024 * 1024) //设置内存的缓存
.diskCacheSize(50 * 1024 * 1024) //设置磁盘缓存的大小
.threadPoolSize(4) //设置线程池的大小是多少
.build();
//设置配置信息this
// ImageLoader.getInstance().init(new ImageLoaderConfiguration.Builder(this).build());
ImageLoader.getInstance().init(configuration);
// ImageLoaderConfiguration aDefault = ImageLoaderConfiguration.createDefault(this);

}
}

到此为止,网络请求框架就封装好了,下面就是轮播图的实现,因为代码文件比较多,我就不一一列举出来了,如果大家有需要可以找我要整个代码。
轮播图目录

注意点:
1. 轮播图图片描述字体资源文件的导入
2. 网络请求框架的初始化


下载demo


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • windows便签快捷键_用了windows十几年,没想到竟然这么好用!隐藏的功能你知道吗?
    本文介绍了使用windows操作系统时的一些隐藏功能,包括便签快捷键、截图功能等。同时探讨了windows和macOS操作系统之间的优劣比较,以及人们对于这两个系统的不同看法。 ... [详细]
  • 大连微软技术社区举办《.net core始于足下》活动,获得微软赛百味和易迪斯的赞助
    九月十五日,大连微软技术社区举办了《.net core始于足下》活动,共有51人报名参加,实际到场人数为43人,还有一位专程从北京赶来的同学。活动得到了微软赛百味和易迪斯的赞助,场地也由易迪斯提供。活动中大家积极交流,取得了非常成功的效果。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 家装日记六:家具采购和瓷砖选择
    本文记录了作者进行家装的过程,包括家具采购和瓷砖选择。作者介绍了自己家的装修风格以及选择烤漆家具和红白系列的原因。作者还提到了装修风格以简约为主,不可以太花哨的要求。最后,作者提到了价格较贵的问题。 ... [详细]
  • 本文讨论了当某位排位靠前的涉众提供了一张精美的界面图片时,是否可以将其作为设计约束。同时还探讨了高质量素材和愿景之间的关系,以及老大自身的软件方法和建模技能。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
author-avatar
手机用户2602936275
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有