Android实现炫酷轮播图效果
轮播图的实现有很多种方式,早先我在网上看了下别人写的轮播图,感觉都比较的墨守成规,有的还有可能加载不了网络图片。所以我在这里自己重新写了下轮播图 ,方便日后的项目使用.
在下面的代码中,我也用volley封装了网络请求框架,异步加载网络图片,也可以给大家参考,非常实用。
效果图:这只是其中的一种效果
底层封装的我在下面会一一展示,先看下在MainActivity中怎样调取这个轮播控件
package com.wujie.advertisment.activity;
import android.view.View;
import com.wujie.advertisment.R;
import com.wujie.advertisment.flashview.EffectConstants;
import com.wujie.advertisment.flashview.FlashView;
import java.util.ArrayList;
public class MainActivity extends BaseActivity {
private FlashView flashView;
private ArrayList
@Override
protected void initView() {
setContentView(R.layout.activity_main);
flashView=(FlashView)findViewById(R.id.flash_view);
}
@Override
protected void initListener() {
}
@Override
protected void initData() {
/**
* 获取接口返回的轮播图地址,获取的部分我已经注释掉了,可以使用。我在这里就直接弄了4张图片
*/
imageUrls.add("1303680113,133301350&fm=21&gp=0.jpg");
imageUrls.add("1350614941,725003865&fm=21&gp=0.jpg");
imageUrls.add("3293842903,1040789920&fm=21&gp=0.jpg");
imageUrls.add(",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
private VolleyRequest() {
}
private VolleyRequest(Map
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
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
Response.ErrorListener errorListener) {
GsonRequest
@Override
protected Map
Log.i("mtag","getParams==========="+mMap.get("goodsname"));
return mMap;
}
};
mRequestQueue.add(request);
return request;
}
/** (wujie)增加代码 usage:不带参的*/
public
Response.ErrorListener errorListener) {
GsonRequest
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
private final Listener
private static Gson mGson = new Gson();
private Class
private TypeToken
public GsonRequest(int method, String url, Class
ErrorListener errorListener) {
super(method, url, errorListener);
mClass = clazz;
mListener = listener;
}
public GsonRequest(int method, String url, TypeToken
ErrorListener errorListener) {
super(method, url, errorListener);
mTypeToken = typeToken;
mListener = listener;
}
public GsonRequest(String url, Class
this(Method.GET, url, clazz, listener, errorListener);
}
public GsonRequest(String url, TypeToken
super(Method.GET, url, errorListener);
mTypeToken = typeToken;
mListener = listener;
}
@Override
protected 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
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
Map
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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播
相关文章
- apk电子书制作 for android V3.0 安卓版
- Android动态更新Menu菜单的实现过程
- Android模拟器(Bochs) v2.6.2 免费版
- Android进阶手写IPC通信框架告别繁琐AIDL
- Android开发中Dart语言7个很酷的特点
- Android编程之ListPreference用法实例分析
- C5GAME(游戏饰品交易平台) for Android v4.2.3 安卓手机版
- Android TextView的TextWatcher使用案例详解
- Android Canvas之drawBitmap方法案例详解
- 60秒核弹危机中文版(生存策略手游) for Android v1.3.142 安卓手机版