這篇文章將為大家詳細(xì)講解有關(guān)Android如何實(shí)現(xiàn)炫酷輪播圖效果,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
新興ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
輪播圖的實(shí)現(xiàn)有很多種方式,早先我在網(wǎng)上看了下別人寫的輪播圖,感覺都比較的墨守成規(guī),有的還有可能加載不了網(wǎng)絡(luò)圖片。所以我在這里自己重新寫了下輪播圖 ,方便日后的項(xiàng)目使用.
效果圖:這只是其中的一種效果
底層封裝的我在下面會一一展示,先看下在MainActivity中怎樣調(diào)取這個輪播控件
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<String> imageUrls=new ArrayList<String>(); @Override protected void initView() { setContentView(R.layout.activity_main); flashView=(FlashView)findViewById(R.id.flash_view); } @Override protected void initListener() { } @Override protected void initData() { /** * 獲取接口返回的輪播圖地址,獲取的部分我已經(jīng)注釋掉了,可以使用。我在這里就直接弄了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<Advertisment>() { // @Override // public void onResponse(Advertisment dvertisment) { // /**在此處將服務(wù)器返回的輪播圖地址一個一個放入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; /** * <pre> * Company: * Author : wujie * Time : 2016/11 * Usage : 所有自定義activity的父類 * desc : * other : * </pre> */ 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(); /** * 設(shè)置監(jiān)聽 */ protected abstract void initListener(); /** * 初始化數(shù)據(jù) */ protected abstract void initData(); /** * 吐司 */ public void showShortToast(String toast) { Toast.makeText(this, toast, Toast.LENGTH_SHORT).show(); } }
那么下面我就來封裝Volley請求網(wǎng)絡(luò)數(shù)據(jù)框架,封裝好了之后,調(diào)用在MainActivity中有體現(xiàn)。
首先,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<String,String> mMap=new HashMap<>(); private VolleyRequest() { } private VolleyRequest(Map<String,String> mMap) { this.mMap=mMap; } /** * @param context ApplicationContext */ public static void buildRequestQueue(Context context) { mRequestQueue = Volley.newRequestQueue(context); //... do something } /** (WangShuJie)增加代碼 usage:非帶參數(shù)*/ public static VolleyRequest newInstance() { if (mRequestQueue == null) { throw new NullPointerException("Call buildRequestQueue method first."); } //... return new VolleyRequest(); } /** (WangShuJie)增加代碼 usage:帶參數(shù)*/ public static VolleyRequest newInstance(Map<String,String> 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 <T> GsonRequest<T> newGsonRequest2(int method, String url, Class<T> clazz, Response.Listener<T> listener, Response.ErrorListener errorListener) { GsonRequest<T> request = new GsonRequest(method,url, clazz, listener, errorListener){ @Override protected Map<String, String> getParams() { Log.i("mtag","getParams==========="+mMap.get("goodsname")); return mMap; } }; mRequestQueue.add(request); return request; } /** (wujie)增加代碼 usage:不帶參的*/ public <T> GsonRequest<T> newGsonRequest(String url, Class<T> clazz, Response.Listener<T> listener, Response.ErrorListener errorListener) { GsonRequest<T> 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<T> extends Request<T> { private final Listener<T> mListener; private static Gson mGson = new Gson(); private Class<T> mClass; private TypeToken<T> mTypeToken; public GsonRequest(int method, String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) { super(method, url, errorListener); mClass = clazz; mListener = listener; } public GsonRequest(int method, String url, TypeToken<T> typeToken, Listener<T> listener, ErrorListener errorListener) { super(method, url, errorListener); mTypeToken = typeToken; mListener = listener; } public GsonRequest(String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) { this(Method.GET, url, clazz, listener, errorListener); } public GsonRequest(String url, TypeToken<T> typeToken, Listener<T> listener, ErrorListener errorListener) { super(Method.GET, url, errorListener); mTypeToken = typeToken; mListener = listener; } @Override protected Response<T> parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data,"UTF-8"); Log.i("mtag","響應(yīng)====="+response.data); if (mTypeToken == null) return Response.success(mGson.fromJson(jsonString, mClass), HttpHeaderParser.parseCacheHeaders(response)); else return (Response<T>) 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數(shù)據(jù)*/ public static Map<String,String> getAdnertisment(String city,String token){ Map<String,String> mMap=new HashMap<>(); mMap.put("city_name",city);//這個key是你要上傳參數(shù)的的key,服務(wù)器通過這個key來獲取客戶端穿的參數(shù)。 mMap.put("token",token); return mMap; } }
封裝好后,我們要將Volley請求加入到隊(duì)列中(初始化):
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; /** * <pre> * Company: xxx * Author : wujie * Time : 2016/11 * Usage : * desc : * other : * </pre> */ 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) //設(shè)置內(nèi)存的緩存 .diskCacheSize(50 * 1024 * 1024) //設(shè)置磁盤緩存的大小 .threadPoolSize(4) //設(shè)置線程池的大小是多少 .build(); //設(shè)置配置信息this // ImageLoader.getInstance().init(new ImageLoaderConfiguration.Builder(this).build()); ImageLoader.getInstance().init(configuration); // ImageLoaderConfiguration aDefault = ImageLoaderConfiguration.createDefault(this); } }
到此為止,網(wǎng)絡(luò)請求框架就封裝好了,下面就是輪播圖的實(shí)現(xiàn),因?yàn)榇a文件比較多,我就不一一列舉出來了,如果大家有需要可以找我要整個代碼。
注意點(diǎn):
1. 輪播圖圖片描述字體資源文件的導(dǎo)入
2. 網(wǎng)絡(luò)請求框架的初始化
關(guān)于“Android如何實(shí)現(xiàn)炫酷輪播圖效果”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
分享名稱:Android如何實(shí)現(xiàn)炫酷輪播圖效果
分享URL:http://vcdvsql.cn/article6/iijdog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、服務(wù)器托管、小程序開發(fā)、網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)