最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實現炫酷輪播圖效果

 更新時間:2021年04月21日 09:19:26   作者:竹林楓fly  
這篇文章主要為大家詳細介紹了Android實現炫酷輪播圖效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

輪播圖的實現有很多種方式,早先我在網上看了下別人寫的輪播圖,感覺都比較的墨守成規(guī),有的還有可能加載不了網絡圖片。所以我在這里自己重新寫了下輪播圖 ,方便日后的項目使用.
在下面的代碼中,我也用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<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();

 /**
 * 設置監(jiān)聽
 */
 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);

 }
}

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

注意點:

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

下載demo

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

相關文章

  • Android?自定義View?加?lifecycle?簡單使用詳解

    Android?自定義View?加?lifecycle?簡單使用詳解

    本文介紹了自定義View的基本使用方法,包括onMeasure、onDraw、自定義樣式和lifecycle的使用,通過了解MeasureSpec的作用和lifecycle的控制,可以更好地管理View的生命周期,避免內存泄露問題,感興趣的朋友一起看看吧
    2025-03-03
  • Android Mms之:對話與聯系人關聯的總結詳解

    Android Mms之:對話與聯系人關聯的總結詳解

    本篇文章是對Android中對話與聯系人的關聯進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Android Studio中使用lambda表達式的方法

    Android Studio中使用lambda表達式的方法

    這篇文章主要介紹了Android Studio中使用lambda表達式的方法,需要的朋友可以參考下
    2017-06-06
  • Android使用WindowManager構造懸浮view

    Android使用WindowManager構造懸浮view

    這篇文章主要為大家詳細介紹了Android使用WindowManager構造懸浮view的具體方法,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android實現截屏并保存操作功能

    Android實現截屏并保存操作功能

    這篇文章主要介紹了Android實現截屏操作功能,即Android中截取當前屏幕的功能,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Android橫豎屏幕切換小結

    Android橫豎屏幕切換小結

    這篇文章主要介紹了Android橫豎屏切換小結的相關資料,需要的朋友可以參考下
    2016-02-02
  • 常見的8個Android內存泄漏問題及解決方法

    常見的8個Android內存泄漏問題及解決方法

    在Android開發(fā)中,內存泄漏是一個常見的問題,這個問題可能會導致應用程序變慢、崩潰或者消耗大量的內存,最終導致設備性能下降,本文就給大家總結一下最常見的8個Android內存泄漏問題及解決方法,需要的朋友可以參考下
    2023-07-07
  • Android開發(fā)之如何自定義數字鍵盤詳解

    Android開發(fā)之如何自定義數字鍵盤詳解

    這篇文章主要給大家介紹了關于Android開發(fā)之如何自定義數字鍵盤的相關資料,本文語言是基于kotlin實現的,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-09-09
  • Android開發(fā)中的Surface庫及用其制作播放器UI的例子

    Android開發(fā)中的Surface庫及用其制作播放器UI的例子

    這篇文章主要介紹了Android開發(fā)中的Surface庫及用其制作播放器界面的例子,利用SurfaceView和SurfaceHolder可以高效地繪制和控制圖形界面,需要的朋友可以參考下
    2016-04-04
  • Android實現花瓣飄落效果的步驟

    Android實現花瓣飄落效果的步驟

    這篇文章主要介紹了Android實現花瓣飄落效果的步驟,幫助大家更好的理解和學習使用Android開發(fā),感興趣的朋友可以了解下
    2021-04-04

最新評論

儋州市| 客服| 志丹县| 汉沽区| 玉屏| 东平县| 曲麻莱县| 互助| 神农架林区| 香港 | 榆中县| 涞源县| 兰考县| 石屏县| 洪洞县| 北宁市| 锦州市| 阿拉尔市| 石景山区| 翁牛特旗| 棋牌| 红原县| 盱眙县| 赞皇县| 科尔| 长汀县| 盐城市| 呼伦贝尔市| 仙居县| 博罗县| 远安县| 二连浩特市| 双城市| 凤庆县| 汶川县| 齐齐哈尔市| 乐都县| 神农架林区| 高阳县| 兖州市| 比如县|