国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現炫酷輪播圖效果

2019-10-21 21:41:15
字體:
來源:轉載
供稿:網友

輪播圖的實現有很多種方式,早先我在網上看了下別人寫的輪播圖,感覺都比較的墨守成規,有的還有可能加載不了網絡圖片。所以我在這里自己重新寫了下輪播圖 ,方便日后的項目使用. 
在下面的代碼中,我也用volley封裝了網絡請求框架,異步加載網絡圖片,也可以給大家參考,非常實用。

效果圖:這只是其中的一種效果 

Android,輪播圖

底層封裝的我在下面會一一展示,先看下在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<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() {/** * 獲取接口返回的輪播圖地址,獲取的部分我已經注釋掉了,可以使用。我在這里就直接弄了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) {//      /**在此處將服務器返回的輪播圖地址一個一個放入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(); /**  * 設置監聽  */ 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<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:非帶參數*/ public static VolleyRequest newInstance() {  if (mRequestQueue == null) {   throw new NullPointerException("Call buildRequestQueue method first.");  }  //...  return new VolleyRequest(); } /** (WangShuJie)增加代碼 usage:帶參數*/ 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","響應====="+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數據*/ public static Map<String,String> getAdnertisment(String city,String token){  Map<String,String> 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;/** * <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) //設置內存的緩存    .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); }}

到此為止,網絡請求框架就封裝好了,下面就是輪播圖的實現,因為代碼文件比較多,我就不一一列舉出來了,如果大家有需要可以找我要整個代碼。 

Android,輪播圖

注意點: 

1. 輪播圖圖片描述字體資源文件的導入 
2. 網絡請求框架的初始化

下載demo

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿鲁科尔沁旗| 万州区| 犍为县| 崇阳县| 芜湖县| 小金县| 平潭县| 徐水县| 庆城县| 天镇县| 丹阳市| 荔波县| 伊通| 饶河县| 信宜市| 清远市| 滨州市| 开封县| 沧州市| 龙海市| 阳原县| 广南县| 政和县| 夏邑县| 台东市| 嵊泗县| 贞丰县| 文安县| 遂川县| 永顺县| 溆浦县| 和龙市| 涟源市| 汪清县| 黔西| 错那县| 沙田区| 曲阜市| 剑阁县| 和顺县| 色达县|